Задания
Версия для печати и копирования в MS Word

На спут­ни­ке «Вос­ход» уста­нов­лен при­бор, пред­на­зна­чен­ный для из­ме­ре­ния сол­неч­ной ак­тив­но­сти. В те­че­ние вре­ме­ни экс­пе­ри­мен­та (это время из­вест­но за­ра­нее) при­бор каж­дую ми­ну­ту пе­ре­даёт в об­сер­ва­то­рию по ка­на­лу связи по­ло­жи­тель­ное целое число, не пре­вы­ша­ю­щее 1000,  — ко­ли­че­ство энер­гии сол­неч­но­го из­лу­че­ния, по­лу­чен­ной за по­след­нюю ми­ну­ту, из­ме­рен­ное в услов­ных еди­ни­цах.

После окон­ча­ния экс­пе­ри­мен­та пе­ре­даётся кон­троль­ное зна­че­ние  — наи­боль­шее число R, удо­вле­тво­ря­ю­щее сле­ду­ю­щим усло­ви­ям:

1)  R  — про­из­ве­де­ние двух чисел, пе­ре­дан­ных в раз­ные ми­ну­ты;

2)  R де­лит­ся на 26.

Не­об­хо­ди­мо найти такое число R. Пред­по­ла­га­ет­ся, что удо­вле­тво­ря­ю­щее усло­ви­ям кон­троль­ное зна­че­ние су­ще­ство­ва­ло в мо­мент пе­ре­да­чи. В ре­зуль­та­те помех при пе­ре­да­че как сами числа, так и кон­троль­ное зна­че­ние могут быть ис­ка­же­ны.

Если удо­вле­тво­ря­ю­щее усло­вию кон­троль­ное зна­че­ние опре­де­лить не­воз­мож­но, то вы­во­дит­ся число 0.

На вход про­грам­ме в пер­вой стро­ке подаётся ко­ли­че­ство чисел 1 < N ≤ 100 000. В каж­дой из по­сле­ду­ю­щих N строк за­пи­са­но одно по­ло­жи­тель­ное целое число, не пре­вы­ша­ю­щее 1000.

 

Вход­ные дан­ные.

Файл A

Файл B

Даны два вход­ных файла (файл A и файл B), каж­дый из ко­то­рых со­дер­жит в пер­вой стро­ке ко­ли­че­ство чисел N (1 ≤ N ≤ 100000). В каж­дой из по­сле­ду­ю­щих N строк за­пи­са­но одно на­ту­раль­ное число, не пре­вы­ша­ю­щее 1000.

При­мер ор­га­ни­за­ции ис­ход­ных дан­ных во вход­ном файле:

5

52

12

39

55

23

При­мер вы­ход­ных дан­ных для при­ведённого выше при­ме­ра вход­ных дан­ных:

2860

В от­ве­те ука­жи­те два числа: сна­ча­ла зна­че­ние ис­ко­мой суммы для файла А, затем для файла B.

 

Ответ:

Спрятать решение

Ре­ше­ние.

Можно за­ме­тить, что 26  =  13 · 2. По­это­му от­ве­том яв­ля­ет­ся наи­боль­шее из двух про­из­ве­де­ний:

a)  мак­си­маль­ное не­чет­ное число, крат­ное 13, умно­жен­ное на мак­си­маль­ное чет­ное число из остав­ших­ся;

b)  мак­си­маль­ное число, крат­ное 26, умно­жен­ное на мак­си­маль­ное число из остав­ших­ся.

Чтобы не взять в про­из­ве­де­нии одно и тоже число, можно хра­нить номер их по­ступ­ле­ния.

Если вдруг най­дем по­вто­ря­ю­щи­е­ся зна­че­ния по этому но­ме­ру (на­при­мер, на тесте из 3 эле­мен­тов 52, 5 и 7 зна­че­ние мак­си­му­ма и мак­си­маль­но­го числа крат­но­го 26 сов­па­да­ет), то най­дем пред­мак­си­му­мы для обоих слу­ча­ев и возь­мем более вы­год­ный из них.

 

При­ведём ре­ше­ние за­да­чи на языке Pascal.

var

n, i, a, max2, max13, max26, max, predmax: integer;

index2, index13, index26, indexmax, ans, ans1, ans2: integer;

f: text;

begin

max:=0;

max26:=0;

max13:=0;

max2:=0;

ans:=0;

ans1:=0;

ans2:=0;

assign(f,'27988_A.txt');

reset(f);

readln(f, n);

for i := 1 to n do begin

readln(f, a);

if (a mod 13 = 0) and (a > max13) then begin

max13 := a;

index13 := i;

end;

if (a mod 2 = 0) and (a > max2) then begin

max2 := a;

index2 := i;

end;

if (a mod 26 = 0) and (a > max26) then begin

max26 := a;

index26 := i;

end;

if (a >= max) then begin

predmax:=max;

max := a;

indexmax := i;

end;

if(a < max) and (a >= predmax) then

predmax := a;

end;

if(index2 <> index13) then

ans1 := max2 * max13;

if(index26 <> indexmax) then

ans2 := max * max26

else

ans2 := predmax * max26;

if(ans1 > ans2) then

ans := ans1

else

ans := ans2;

writeln(ans);

end.

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла A ответ  — 783900, из файла B  — 988000.

 

При­ме­ча­ние. Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

Раздел кодификатора ФИПИ: