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

Вам пред­ла­га­ет­ся два за­да­ния с по­хо­жи­ми усло­ви­я­ми: за­да­ние А и за­да­ние Б. Вы мо­же­те ре­шать оба за­да­ния или одно из них по сво­е­му вы­бо­ру. За­да­ние Б более слож­ное, его ре­ше­ние оце­ни­ва­ет­ся выше. Ито­го­вая оцен­ка вы­став­ля­ет­ся как мак­си­маль­ная из оце­нок за за­да­ния А и Б.

 

За­да­ние А. Име­ет­ся набор дан­ных, со­сто­я­щий из 6 пар по­ло­жи­тель­ных целых чисел. Не­об­хо­ди­мо вы­брать из каж­дой пары ровно одно число так, чтобы сумма всех вы­бран­ных чисел не де­ли­лась на 3 и при этом была мак­си­маль­но воз­мож­ной. Если по­лу­чить тре­бу­е­мую сумму не­воз­мож­но, в ка­че­стве от­ве­та нужно вы­дать 0.

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

Мак­си­маль­ная оцен­ка за пра­виль­ную про­грам­му – 2 балла.

 

За­да­ние Б. Име­ет­ся набор дан­ных, со­сто­я­щий из пар по­ло­жи­тель­ных целых чисел. Не­об­хо­ди­мо вы­брать из каж­дой пары ровно одно число так, чтобы сумма всех вы­бран­ных чисел не де­ли­лась на 3 и при этом была мак­си­маль­но воз­мож­ной. Если по­лу­чить тре­бу­е­мую сумму не­воз­мож­но, в ка­че­стве от­ве­та нужно вы­дать 0.

На­пи­ши­те про­грам­му для ре­ше­ния этой за­да­чи.

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

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

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

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

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

 

Как в ва­ри­ан­те А, так и в ва­ри­ан­те Б про­грам­ма долж­на на­пе­ча­тать одно число  — мак­си­маль­но воз­мож­ную сумму, со­от­вет­ству­ю­щую усло­ви­ям за­да­чи (или 0, если такую сумму по­лу­чить нель­зя).

 

НА­ПО­МИ­НА­ЕМ! Не за­будь­те ука­зать, к ка­ко­му за­да­нию от­но­сит­ся каж­дая из пред­став­лен­ных Вами про­грамм.

 

Перед тек­стом про­грам­мы крат­ко опи­ши­те Ваш ал­го­ритм ре­ше­ния, ука­жи­те ис­поль­зо­ван­ный язык про­грам­ми­ро­ва­ния и его вер­сию (на­при­мер, Free Pascal 2.6.4).

 

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

Для ва­ри­ан­та А на вход про­грам­ме подаётся шесть строк, каж­дая из ко­то­рых со­дер­жит два на­ту­раль­ных числа, не пре­вы­ша­ю­щих 10 000.

При­мер вход­ных дан­ных для ва­ри­ан­та А:

1 3

5 12

6 9

5 4

3 3

1 1

 

Для ва­ри­ан­та Б на вход про­грам­ме в пер­вой стро­ке подаётся ко­ли­че­ство пар N (1 ≤ N ≤ 100 000). Каж­дая из сле­ду­ю­щих N строк со­дер­жит два на­ту­раль­ных числа, не пре­вы­ша­ю­щих 10 000.

При­мер вход­ных дан­ных для ва­ри­ан­та Б:

6

1 3

5 12

6 9

5 4

3 3

1 1

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

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

Ре­ше­ние.

За­да­ние Б. Cна­ча­ла рас­смот­рим ре­ше­ние для более об­ще­го за­да­ния (ва­ри­ант Б).

Ре­ше­ние 1.

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

За­ме­ча­ние для экс­пер­та. От уче­ни­ка не тре­бу­ет­ся до­ка­зы­вать пра­виль­ность пред­ло­жен­но­го ал­го­рит­ма. Для удоб­ства экс­пер­тов до­ка­жем, что при на­ли­чии ре­ше­ния до­ста­точ­но за­ме­нить одно число. Пусть это не так, т. е. най­дут­ся две такие пары, от ко­то­рых в ис­ко­мую сумму вхо­дят не бόльшие в своих парах числа x1 и y1, а мень­шие числа из со­от­вет­ству­ю­щих пар: x2 и y2. При том x2 + y2 имеет оста­ток от де­ле­ния на 3, от­лич­ный от остат­ка от де­ле­ния на 3 числа x1 + y1 (иначе мы могли бы вклю­чить в сумму x1 + y1 вме­сто x2 + y2). Но это озна­ча­ет, что хотя бы одно из чисел x2, y2 тоже при де­ле­нии на 3 имеет оста­ток, от­лич­ный от со­от­вет­ству­ю­ще­го мак­си­маль­но­го числа пары. Зна­чит, оп­ти­маль­ной яв­ля­ет­ся за­ме­на толь­ко од­но­го из таких чисел.

Про­грам­ма чи­та­ет все дан­ные один раз. В каж­дой паре опре­де­ля­ет­ся боль­шее число Max и раз­ность между бόльшим и мень­шим чис­ла­ми пары D. После об­ра­бот­ки оче­ред­ной пары про­грам­ма хра­нит два числа: s  — сумму всех мак­си­маль­ных эле­мен­тов про­чи­тан­ных пар и Dmin  — наи­мень­шую воз­мож­ную раз­ность D, не крат­ную 3. Окон­ча­тель­ным от­ве­том будет зна­че­ние s, если оно не де­лит­ся на 3, и s – Dmin в про­тив­ном слу­чае. Если s де­лит­ся на 3, а Dmin не опре­де­ле­но (раз­ность между чис­ла­ми во всех парах крат­на 3), ответ в со­от­вет­ствии с усло­ви­я­ми за­да­чи счи­та­ет­ся рав­ным 0

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

 

const

    aMax = 10000; {наи­боль­шее воз­мож­ное число в ис­ход­ных дан­ных}

 

var

    N: longint; {ко­ли­че­ство пар}

    a, b: longint; {пара чисел}

    Max: longint; {мак­си­мум в паре}

    Min: longint; {ми­ни­мум в паре}

    s: longint; {сумма вы­бран­ных чисел}

    D_min: longint; {ми­ни­маль­ная раз­ни­ца Max-Min не крат­ная 3}

    i: longint;

 

begin

    s := 0;

    D_min := aMax + 1;

    readln(N);

    for i := 1 to N do begin

        readln(a, b);

        if a>b then begin Max:=a; Min:=b end

            else begin Max:=b; Min:=a end;

        s := s + Max;

        if ((Max - Min) mod 3 > 0) and (Max - Min < D_min)

            then D_min := Max - Min

    end;

    if s mod 3 = 0 then begin

        if D_min > aMax then s := 0

        else s := s – D_min

    end;

    writeln(s)

end.

 

Ре­ше­ние 2.

Воз­мож­но и ре­ше­ние, ос­но­ван­ное на дру­гой идее, а имен­но будем хра­нить для каж­до­го про­чи­тан­но­го на­бо­ра пар три суммы (s0, s1, s2)  — мак­си­маль­ные суммы эле­мен­тов пар, име­ю­щие при де­ле­нии на 3 со­от­вет­ствен­но остат­ки 0, 1 и 2. При об­ра­бот­ке оче­ред­ной пары (a1, a2) эти суммы об­нов­ля­ют­ся. Для этого до­ста­точ­но рас­смот­реть суммы s0 + a1, s1 + a1, s2 + a1, s0 + a2, s1 + a2, s2 + a2 и для каж­до­го воз­мож­но­го остат­ка от де­ле­ния на 3 вы­брать в ка­че­стве но­во­го зна­че­ния s0, s1 или s2 зна­че­ние наи­боль­шей из ука­зан­ных сумм, да­ю­щей дан­ный оста­ток. Окон­ча­тель­ным от­ве­том будет бόльшая из сумм s1 и s2.

Эта идея при­во­дит к более гро­мозд­кой ре­а­ли­за­ции, но все ос­нов­ные тре­бо­ва­ния по эф­фек­тив­но­сти в ней вы­пол­не­ны, по­это­му по­доб­ное ре­ше­ние при от­сут­ствии оши­бок можно оце­нить мак­си­маль­ным ко­ли­че­ством бал­лов. Ниже при­во­дит­ся при­мер ос­но­ван­ной на этом прин­ци­пе про­грам­мы на языке.

 

Пас­каль.

За­ме­ча­ние для экс­пер­та. В при­ведённом ниже ре­ше­нии для хра­не­ния s0, s1, s2 ис­поль­зу­ет­ся мас­сив snew[0..2]. Это упро­ща­ет ре­а­ли­за­цию, од­на­ко ре­ше­ние, в ко­то­ром ис­поль­зу­ют­ся про­стые пе­ре­мен­ные, также до­пу­сти­мо. Не сле­ду­ет сни­жать баллы толь­ко за то, что в про­грам­ме ис­поль­зо­ва­ны про­стые пе­ре­мен­ные, а не мас­сив, как в привёден­ном ниже при­ме­ре.

 

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

 

var

    N: longint; {ко­ли­че­ство пар}

    a: array[1..2] of longint; {пара чисел}

    s_old, s_new: array[0..2] of longint;

        {суммы с со­от­вет­ству­ю­щи­ми остат­ка­ми от де­ле­ния на 3}

    i, j, k, r: longint;

begin

    readln(N);

    for j := 0 to 2 do

        s_old[j] := 0;

    for i := 1 to N do begin

        readln(a[1], a[2]);

        for j := 0 to 2 do

            s_new[j] := 0;

        for k := 1 to 2 do begin

            for j := 0 to 2 do begin

                if (s_old[j] > 0) or (i = 1) then begin

                    r := (s_old[j] + a[k]) mod 3;

                    if s_new[r] < s_old[j] + a[k] then

                        s_new[r] := s_old[j] + a[k]

                end

            end

        end;

        s_old := s_new

    end;

    if s_new[1] > s_new[2] then

        writeln(s_new[1])

    else

        writeln(s_new[2]);

    {если ре­ше­ния не су­ще­ству­ет, то s_new[1] и s_new[2]

    ока­жут­ся рав­ны­ми нулю}

end.

 

За­ме­ча­ние для экс­пер­та. Уче­ник может «пе­ре­стра­хо­вать­ся» и явно про­ве­рить, что хотя бы одно из чисел snew[1], snew[2] от­лич­но от 0.

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

За­да­ние А. Это за­да­ние можно вы­пол­нить «в лоб»: со­хра­нить в мас­си­ве все ис­ход­ные дан­ные, пе­ре­брать все воз­мож­ные спо­со­бы вы­бо­ра од­но­го эле­мен­та из каж­дой пары и найти мак­си­маль­ную сумму, со­от­вет­ству­ю­щую усло­ви­ям за­да­чи.

Ниже при­во­дит­ся при­мер та­ко­го ре­ше­ния

 

При­мер ре­ше­ния за­да­чи А на языке Пас­каль

var

    a: array[1..6, 1..2] of longint;

    i1, i2, i3, i4, i5, i6: longint;

    s, sMax: longint;

begin

    for i1:= 1 to 6 do readln(a[i1,1], a[i1,2]);

    sMax := 0;

    for i1:=1 to 2 do

    for i2:=1 to 2 do

    for i3:=1 to 2 do

    for i4:=1 to 2 do

    for i5:=1 to 2 do

    for i6:=1 to 2 do begin

        s:=a[1,i1]+a[2,i2]+a[3,i3]+a[4,i4]+a[5,i5]+a[6,i6];

        if (s mod 3 <> 0) and (s > sMax) then sMax := s

    end;

    writeln(sMax)

end.

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

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
По­яс­не­ния для про­ве­ря­ю­щих.

1. За­да­ние Б яв­ля­ет­ся услож­не­ни­ем за­да­ния А. Если в ка­че­стве ре­ше­ния за­да­ния Б пред­став­ле­но ре­ше­ние за­да­ния А, то со­глас­но при­ведённым ниже кри­те­ри­ям его оцен­ка будет такой же, как если бы это ре­ше­ние было пред­став­ле­но в ка­че­стве ре­ше­ния за­да­ния А.

2. Два за­да­ния (и, со­от­вет­ствен­но, воз­мож­ность для эк­за­ме­ну­е­мо­го пред­ста­вить две про­грам­мы) дают уче­ни­ку воз­мож­ность (при его же­ла­нии) сна­ча­ла на­пи­сать менее слож­ное и менее эф­фек­тив­ное ре­ше­ние (за­да­ние А), ко­то­рое даёт ему право по­лу­чить 2 балла, а затем при­сту­пить к по­ис­ку более эф­фек­тив­но­го ре­ше­ния.

3. При­ведённые в п. 2.1–2.5 пра­ви­ла имеют целью из­бе­жать сни­же­ния оцен­ки из-за того, что уче­ник пе­ре­пу­тал обо­зна­че­ния за­да­ний

Кри­те­рии оце­ни­ва­ния за­да­ния А
При ре­ше­нии за­да­чи A про­грам­ма верно на­хо­дит тре­бу­е­мую сумму

для любых 6 пар ис­ход­ных дан­ных. До­пус­ка­ет­ся до пяти син­так­си­че­ских и при­рав­нен­ных к ним оши­бок (см. кри­те­рии оце­ни­ва­ния за­да­ния Б на 4 балла)

2
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 2 балла. Из опи­са­ния ал­го­рит­ма и общей струк­ту­ры про­грам­мы видно, что эк­за­ме­ну­е­мый в целом пра­виль­но пред­став­ля­ет путь ре­ше­ния за­да­чи. До­пус­ка­ет­ся любое ко­ли­че­ство «опи­сок»1
Не вы­пол­не­ны кри­те­рии, поз­во­ля­ю­щие по­ста­вить 1 или 2 балла0
Мак­си­маль­ный балл для за­да­ния А2

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

Про­грам­ма может со­дер­жать не более трёх син­так­си­че­ских оши­бок сле­ду­ю­щих видов:

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

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

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

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

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

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

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

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

До­пус­ка­ет­ся ошиб­ка при вводе и вы­во­де дан­ных, не вли­я­ю­щая на со­дер­жа­ние ре­ше­ния.

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

Кроме того, до­пус­ка­ет­ся на­ли­чие одной ошиб­ки, при­над­ле­жа­щей к од­но­му из сле­ду­ю­щих видов:

1) ошиб­ка ини­ци­а­ли­за­ции, в том числе от­сут­ствие ини­ци­а­ли­за­ции;

2) не вы­во­дит­ся ре­зуль­тат, рав­ный 0, или вме­сто 0 вы­во­дит­ся не­вер­ное зна­че­ние;

3) до­пу­щен выход за гра­ни­цу мас­си­ва;

4) ис­поль­зу­ет­ся знак “<” вме­сто “<=”, “or” вме­сто “and” и т.п.

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

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

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

2
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 2, 3 или 4 балла. Из опи­са­ния ал­го­рит­ма или общей струк­ту­ры про­грам­мы видно, что эк­за­ме­ну­е­мый в целом пра­виль­но пред­став­ля­ет путь ре­ше­ния за­да­чи не­за­ви­си­мо от эф­фек­тив­но­сти. При этом про­грам­ма может быть пред­став­ле­на от­дель­ны­ми фраг­мен­та­ми, без огра­ни­че­ний на ко­ли­че­ство син­так­си­че­ских и со­дер­жа­тель­ных оши­бок. 1 балл ста­вит­ся также за ре­ше­ния, вер­ные лишь в част­ных слу­ча­ях1
Не вы­пол­не­ны кри­те­рии, поз­во­ля­ю­щие по­ста­вить 1, 2, 3 или 4 балла0
Мак­си­маль­ный балл для за­да­ния Б4
Ито­го­вый мак­си­маль­ный балл4
Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ—2017 по ин­фор­ма­ти­ке