Задания
Версия для печати и копирования в MS Word
Тип Д27 C4 № 23925
i

Дана по­сле­до­ва­тель­ность N целых по­ло­жи­тель­ных чисел. Рас­смат­ри­ва­ют­ся все пары эле­мен­тов по­сле­до­ва­тель­но­сти, раз­ность ко­то­рых чётна, и в этих парах, по край­ней мере, одно из чисел пары де­лит­ся на 17. По­ря­док эле­мен­тов в паре не­ва­жен. Среди всех таких пар нужно найти и вы­ве­сти пару с мак­си­маль­ной сум­мой эле­мен­тов. Если оди­на­ко­вую мак­си­маль­ную сумму имеет не­сколь­ко пар, можно вы­ве­сти любую из них. Если под­хо­дя­щих пар в по­сле­до­ва­тель­но­сти нет, нужно вы­ве­сти два нуля.

Опи­са­ние вход­ных и вы­ход­ных дан­ных.

В пер­вой стро­ке вход­ных дан­ных задаётся ко­ли­че­ство чисел N (2 ≤ N ≤ 10 000). В каж­дой из по­сле­ду­ю­щих N строк за­пи­са­но одно на­ту­раль­ное число, не пре­вы­ша­ю­щее 10 000.

При­мер вход­ных дан­ных:

5

34

12

51

52

51

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

51 51

 

По­яс­не­ние. Из дан­ных пяти чисел можно со­ста­вить три раз­лич­ные пары, удо­вле­тво­ря­ю­щие усло­вию: (34, 12), (34, 52), (51, 51). Наи­боль­шая сумма по­лу­ча­ет­ся в паре (51, 51). Эта пара до­пу­сти­ма, так как число 51 встре­ча­ет­ся в ис­ход­ной по­сле­до­ва­тель­но­сти два­жды.

Тре­бу­ет­ся на­пи­сать эф­фек­тив­ную по вре­ме­ни и па­мя­ти про­грам­му для ре­ше­ния опи­сан­ной за­да­чи.

Про­грам­ма счи­та­ет­ся эф­фек­тив­ной по вре­ме­ни, если при од­но­вре­мен­ном уве­ли­че­нии ко­ли­че­ства эле­мен­тов по­сле­до­ва­тель­но­сти n и па­ра­мет­ра m в k раз время ра­бо­ты про­грам­мы уве­ли­чи­ва­ет­ся не более чем в k раз.

Про­грам­ма счи­та­ет­ся эф­фек­тив­ной по па­мя­ти, если па­мять, не­об­хо­ди­мая для хра­не­ния всех пе­ре­мен­ных про­грам­мы, не пре­вы­ша­ет 4 ки­ло­бай­та и не уве­ли­чи­ва­ет­ся с ро­стом n.

Мак­си­маль­ная оцен­ка за пра­виль­ную (не со­дер­жа­щую син­так­си­че­ских оши­бок и да­ю­щую пра­виль­ный ответ при любых до­пу­сти­мых вход­ных дан­ных) про­грам­му, эф­фек­тив­ную по вре­ме­ни и па­мя­ти,  — 4 балла. Мак­си­маль­ная оцен­ка за пра­виль­ную про­грам­му, воз­мож­но, не­эф­фек­тив­ную по па­мя­ти или время вы­пол­не­ния ко­то­рой су­ще­ствен­но за­ви­сит от ве­ли­чи­ны m,  — 3 балла.

Мак­си­маль­ная оцен­ка за пра­виль­ную про­грам­му, не удо­вле­тво­ря­ю­щую тре­бо­ва­ни­ям эф­фек­тив­но­сти,  — 2 балла.

Вы мо­же­те сдать одну про­грам­му или две про­грам­мы ре­ше­ния за­да­чи (на­при­мер, одна из про­грамм может быть менее эф­фек­тив­на). Если Вы сда­ди­те две про­грам­мы, то каж­дая из них будет оце­ни­вать­ся не­за­ви­си­мо от дру­гой, ито­го­вой ста­нет бо́льшая из двух оце­нок.

Перед тек­стом про­грам­мы обя­за­тель­но крат­ко опи­ши­те ал­го­ритм ре­ше­ния. Ука­жи­те ис­поль­зо­ван­ный язык про­грам­ми­ро­ва­ния и его вер­сию.

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

Ре­ше­ние.

 

При­мер 1. Про­грам­ма на языке Пас­каль. Про­грам­ма эф­фек­тив­на по вре­ме­ни и па­мя­ти.

 

var

N: integer;

a: integer;

i: integer;

max: array [0..1] of integer;

max17: array [0..1] of integer;

begin

max[0] := 0;

max[1] := 0;

max17[0] := 0;

max17[1] := 0;

readln(N);

for i := 1 to N do

begin

readln(a);

if (a mod 17 = 0) and (a mod 2 = 0) and (a >= max17[0]) then begin

if max17[0] > max[0] then max[0] := max17[0];

max17[0] := a;

end

else if (a mod 17 = 0) and (a mod 2 = 1) and (a >= max17[1]) then begin

if max17[1] > max[1] then max[1] := max17[1];

max17[1] := a;

end

else if (a mod 17 > 0) and (a mod 2 = 0) and (a > max[0]) then max[0] := a

else if (a mod 17 > 0) and (a mod 2 = 1) and (a > max[1]) then max[1] := a;

end;

if (max[0] = 0) or (max17[0] = 0) then begin

max[0] := 0;

max17[0] := 0;

end;

if (max[1] = 0) or (max17[1] = 0) then begin

max[1] := 0;

max17[1] := 0;

end;

if (max[0] + max17[0]) > (max[1] + max17[1]) then writeln(max[0], ' ', max17[0])

else writeln(max[1], ' ', max17[1]);

end.

Спрятать критерии
Критерии проверки:

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Про­грам­ма пра­виль­но ра­бо­та­ет для любых вход­ных дан­ных про­из­воль­но­го раз­ме­ра при усло­вии ис­прав­ле­ния в ней не более трёх син­так­си­че­ских оши­бок из при­ведённого ниже спис­ка до­пу­сти­мых оши­бок. Ис­поль­зу­е­мая па­мять не за­ви­сит от ко­ли­че­ства про­чи­тан­ных чисел, а время ра­бо­ты про­пор­ци­о­наль­но этому ко­ли­че­ству.

До­пус­ка­ет­ся на­ли­чие в тек­сте про­грам­мы до трёх син­так­си­че­ских

оши­бок од­но­го из сле­ду­ю­щих видов:

1) про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции;

2) не­вер­но на­пи­са­но, про­пу­ще­но или на­пи­са­но лиш­нее

за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния;

3) не опи­са­на или не­вер­но опи­са­на пе­ре­мен­ная;

4) при­ме­ня­ет­ся опе­ра­ция, не до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных.

Если одна и та же ошиб­ка встре­ча­ет­ся не­сколь­ко раз, это счи­та­ет­ся за одну ошиб­ку.

4
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 4 балла.

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

(см. ком­мен­та­рий к эф­фек­тив­но­му ре­ше­нию за­да­чи). До­пус­ка­ет­ся на­ли­чие не более одной со­дер­жа­тель­ной ошиб­ки сле­ду­ю­щих видов:

1) до­пу­ще­на ошиб­ка при вводе дан­ных (на­при­мер, не

счи­ты­ва­ет­ся зна­че­ние N, или числа могут быть счи­та­ны, толь­ко если будут за­пи­са­ны в одной стро­ке через про­бел);

2) не­вер­ная ини­ци­а­ли­за­ция или её от­сут­ствие там, где она не­об­хо­ди­ма;

3) ис­поль­зу­ет­ся не­вер­ный тип дан­ных, при этом ошиб­ка не яв­ля­ет­ся син­так­си­че­ской;

4) не более од­но­го раза ис­поль­зу­ет­ся одна пе­ре­мен­ная (или кон­стан­та) вме­сто дру­гой, или не более од­но­го раза ис­поль­зу­ет­ся один знак опе­ра­ции вме­сто дру­го­го, или не более од­но­го раза ис­поль­зу­ет­ся одно за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния вме­сто дру­го­го, при этом ошиб­ка не яв­ля­ет­ся син­так­си­че­ской;

5) слу­жеб­ное слово else от­но­сит­ся не к тому if, к ка­ко­му сле­ду­ет;

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

7) выход за гра­ни­цу мас­си­ва (в част­но­сти, при об­ра­ще­нии к m-му эле­мен­ту мас­си­ва с ин­дек­са­ми от 0 до m–1, даже если он су­ще­ству­ет, но не за­пол­нен нуж­ным зна­че­ни­ем);

8) не вы­пол­нен или не­вер­но вы­пол­нен учёт эле­мен­тов, оста­ток от де­ле­ния ко­то­рых на m равен 0.

3 балла также ста­вит­ся за про­грам­му, в ко­то­рой нет

со­дер­жа­тель­ных оши­бок, но ис­поль­зу­е­мая па­мять за­ви­сит от ко­ли­че­ства про­чи­тан­ных чисел (на­при­мер, вход­ные дан­ные за­по­ми­на­ют­ся в мас­си­ве, кон­тей­не­ре STL в C++ или дру­гой ана­ло­гич­ной струк­ту­ре дан­ных).

3
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 3 или 4 балла.

Про­грам­ма ра­бо­та­ет верно, эф­фек­тив­но по вре­ме­ни при усло­вии ис­прав­ле­ния не более трёх со­дер­жа­тель­ных оши­бок, опи­сан­ных в кри­те­ри­ях на 3 балла и ана­ло­гич­ных им, и не более де­вя­ти син­так­си­че­ских оши­бок, ука­зан­ных в кри­те­ри­ях на 4 балла. При этом в про­грам­ме могут быть опу­ще­ны с по­мо­щью мно­го­то­чия од­но­тип­ные дей­ствия, свя­зан­ные с рас­смот­ре­ни­ем каж­до­го из остат­ков от де­ле­ния на m.

 

Не до­пус­ка­ет­ся вы­став­ле­ние 2 бал­лов за про­грам­му, если в ней учи­ты­ва­ют­ся суммы вида a[i]+a[i] (в том числе в ал­го­рит­ме без хра­не­ния эле­мен­тов по­сле­до­ва­тель­но­сти).

2 балла также ста­вит­ся за кор­рект­ное пе­ре­бор­ное ре­ше­ние, в ко­то­ром все числа со­хра­ня­ют­ся в мас­си­ве (или дру­гой ана­ло­гич­ной струк­ту­ре) и рас­смат­ри­ва­ют­ся все воз­мож­ные пары. При­мер фраг­мен­та со­от­вет­ству­ю­щей про­грам­мы на языке Пас­каль:

left := 0; right := 0;

for i := 1 to N - 1 do

for j := i + 1 to N do

if (a[i] > a[j]) and ((a[i] + a[j]) mod m = 0) then

if a[i] + a[j] > left + right then

begin

left := a[i];

right := a[j]

end;

В цикле ре­а­ли­за­ции пе­ре­бор­но­го ал­го­рит­ма не до­пус­ка­ют­ся выход ин­дек­сов за гра­ни­цы мас­си­ва, а также любые ло­ги­че­ские ошиб­ки

2
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 2, 3 или 4 балла.

При этом про­грам­ма опи­сы­ва­ет в целом пра­виль­ный ал­го­ритм (эф­фек­тив­ный или нет) и в ней при­сут­ству­ет не менее двух эле­мен­тов ре­ше­ния из пе­ре­чис­лен­ных ниже, воз­мож­но, ре­а­ли­зо­ван­ных с ошиб­ка­ми:

• учи­ты­ва­ет­ся усло­вие a[i] > a[j];

• про­ве­ря­ет­ся де­ли­мость суммы на m;

• ищет­ся пара с мак­си­маль­ной сум­мой.

В слу­чае, если в любом ре­ше­нии со­дер­жит­ся не более од­но­го из ука­зан­ных эле­мен­тов, про­грам­ма оце­ни­ва­ет­ся в 0 бал­лов.

1
Не вы­пол­не­ны кри­те­рии, поз­во­ля­ю­щие по­ста­вить 1, 2, 3 или 4 балла.0
Мак­си­маль­ный балл4
Источник: ЕГЭ по ин­фор­ма­ти­ке 2020. До­сроч­ная волна. Ва­ри­ант 1