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

На уско­ри­те­ле для боль­шо­го числа ча­стиц про­из­во­дят­ся за­ме­ры ско­ро­сти каж­дой из них. Ско­рость ча­сти­цы  — это целое число (по­ло­жи­тель­ное, от­ри­ца­тель­ное или 0). Ча­стиц, ско­рость ко­то­рых из­ме­ре­на, может быть очень много, но не может быть мень­ше трёх. Ско­ро­сти всех ча­стиц раз­лич­ны. При об­ра­бот­ке ре­зуль­та­тов в каж­дой серии экс­пе­ри­мен­та от­би­ра­ет­ся ос­нов­ное мно­же­ство ско­ро­стей. Это такое не­пу­стое мно­же­ство ско­ро­стей ча­стиц (в него могут войти как ско­рость одной ча­сти­цы, так и ско­ро­сти всех ча­стиц серии), для ко­то­ро­го про­из­ве­де­ние ско­ро­стей яв­ля­ет­ся мак­си­маль­ным среди всех воз­мож­ных мно­жеств. При на­хож­де­нии про­из­ве­де­ния знак числа учи­ты­ва­ет­ся. Если есть не­сколь­ко таких мно­жеств, то ос­нов­ным счи­та­ет­ся то, ко­то­рое со­дер­жит наи­боль­шее ко­ли­че­ство эле­мен­тов.

 

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

 

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

 

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

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

 

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

Обя­за­тель­но ука­жи­те, что про­грам­ма яв­ля­ет­ся ре­ше­ни­ем за­да­ния А. Мак­си­маль­ная оцен­ка за вы­пол­не­ние за­да­ния А  — 2 балла.

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

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

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

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

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

 

 

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

 

5

 

123

2

 

-1000

 

0

 

10

 

Про­грам­ма долж­на вы­ве­сти в по­ряд­ке воз­рас­та­ния но­ме­ра ча­стиц, ско­ро­сти ко­то­рых при­над­ле­жат ос­нов­но­му мно­же­ству дан­ной серии. Ну­ме­ра­ция ча­стиц ведётся с еди­ни­цы.

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

 

1 2 5

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

Ре­ше­ние.

Ос­нов­ное мно­же­ство со­сто­ит из всех зна­че­ний ско­ро­стей, кроме 0, если он встре­ча­ет­ся, и кроме ми­ни­маль­ной по мо­ду­лю от­ри­ца­тель­ной ско­ро­сти, если от­ри­ца­тель­ных ско­ро­стей нечётное число.

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

Ниже при­ве­де­ны при­ме­ры ре­ше­ния за­да­ния на язы­ках Пас­каль и Бей­сик.

До­пус­ка­ют­ся ре­ше­ния, за­пи­сан­ные на дру­гих язы­ках про­грам­ми­ро­ва­ния.

 

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

var n, i, j, k, c, min, a: longint;

begin

readln(n);

min := -1000000001;

k := 0;

j := 0;

c := 0;

for i := 1 to n do

begin

readln(a);

if a = 0 then j := i;

if a < 0 then

begin

c := c + 1;

if a > min then

begin

min := a;

k := i;

end

end

end;

for i := 1 to n do

if (i <> j) and ((c mod 2 = 0 ) or (i <> k)) then

write(i, ' ');

end.

 

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

 

INPUT n

min = 0

k = 0

j = 0

c = 0

FOR i = 1 TO n

INPUT a

IF a = 0 THEN j = i

IF a < 0 THEN

c = c +1

IF (min = 0) OR (a > min) THEN

min = a

k = i

END IF

END IF

NEXT i

FOR i = 1 TO n

IF (i <> j) AND ((C MOD 2 = 0) OR (i <> k)) THEN PRINT i

NEXT i

END

 

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

#include <iostream>

using namespace std;

int main (){

int N = 0;

cin >> N;

long min = -1000000001;

int j = 0, k = 0, c = 0;

for (int i = 1; i <= N; ++i)

{

int num;

cin >> num;

if (num == 0)

j = i;

if (num < 0)

{

c += 1;

if (min < num)

{

min = num;

k = i;

}

}

}

for (int i = 1; i <= N; ++i)

{

if (i != j && (c % 2 == 0 || i != k))

cout << i << ' ';

}

return 0;

}

 

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

var

a: array[1..10000] of integer; {ис­ход­ные дан­ные}

N: integer; {ко­ли­че­ство чисел}

neg: integer; {ко­ли­че­ство от­ри­ца­тель­ных чисел}

maxneg: integer; {наи­боль­шее от­ри­ца­тель­ное число}

i: integer;

begin

readln(N);

neg := 0;

maxneg := -1000000001;

for i := 1 to N do readln(a[i]);

for i := 1 to N do begin

if a[i]<0 then neg := neg + 1;

if (a[i]<0) and (a[i]>maxneg) then maxneg := a[i];

end;

if neg mod 2 <> 0 then

for i := 1 to N do

if (a[i]<>0) and (a[i]<>maxneg) then write(i, ' ');

if neg mod 2 = 0 then

for i := 1 to N do

if (a[i]<>0) then write(i, ' ');

end.

 

При­во­дим эф­фек­тив­ное ре­ше­ние Ни­ко­лая Ар­тю­хи­на на C++.

#include <iostream>

using namespace std;

int main()

{

    int i, i0, imin, n, x, min=-1000000001, k=0;// ми­ни­мум ищем по мо­ду­лю

    cin >> n;

    for(i=0;i<n;i++){

         cin >> x;

         if (x==0) i0=i;

         if (x<0){

             if(min<x) {

                    min=x;

                    imin=i;

             }

             k++;

         }

    }

    for(i=0;i<n;i++){

         if((i!=i0)&&((k%2==0)||(i!=imin))) cout << i+1 << " ";

    }

 

     return 0;

}

 

 

При­во­дим эф­фек­тив­ное ре­ше­ние Игоря Ку­да­ше­ва на Python.

n = int(input())

zero = –1

count = 0

min = –10 ** 19

mini = –1

for i in range(1, n + 1):

    x = int(input())

    if x < 0:

        count += 1

        if min < x:

            mini = i

            min = x

    elif x == 0:

        zero = i

for i in range(1, n + 1):

    if i != zero and (count % 2 == 0 or i != mini): print(i, end = ' ')

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

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

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

До­пус­ка­ет­ся до двух со­дер­жа­тель­ных оши­бок, опи­сан­ны­хв кри­те­ри­ях оце­ни­ва­ния за­да­ния Б на 3 балла

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

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

1
Не вы­пол­не­ны кри­те­рии, поз­во­ля­ю­щие по­ста­вить 1 или 2 балла0
Мак­си­маль­ный балл для за­да­ния А2

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

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

— про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции (за­пя­тая, точка с за­пя­той, скоб­ки и т.д.);

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

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

— при­ме­ня­ет­ся опе­ра­ция, не­до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных. К син­так­си­че­ским ошиб­кам при­рав­ни­ва­ет­ся ис­поль­зо­ва­ние не­вер­но­го типа дан­ных (на­при­мер, ис­поль­зо­ва­ние це­ло­го типа вме­сто ве­ще­ствен­но­го для пред­став­ле­ния дан­ных при вводе и об­ра­бот­ке).

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

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

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

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

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

— не­вер­ная ини­ци­а­ли­за­ция при по­ис­ке ми­ни­маль­но­го зна­че­ния;

— не­вер­ная об­ра­бот­ка на­чаль­ных эле­мен­тов дан­ных, ко­то­рая может, на­при­мер, при­ве­сти к по­лу­че­нию оши­боч­но­го от­ве­та при 15 < N < 30;

— не­точ­ное опре­де­ле­ние гра­ниц мас­си­ва, выход за гра­ни­цу мас­си­ва (на­при­мер, опи­сан мас­сив с гра­ни­ца­ми от 1 до 15, а ре­аль­но ис­поль­зу­ет­ся от 0 до 14 или на­о­бо­рот);

— вы­чис­лен­ный ин­декс эле­мен­та мас­си­ва на 1 от­ли­ча­ет­ся от вер­но­го;

— ис­поль­зу­ет­ся опе­ра­ция "<" вме­сто "<=", "or" вме­сто "and" и т.п.;

— не учи­ты­ва­ет­ся, что за­дан­ные по­ка­за­ния могут на­чи­нать­ся с од­но­го или не­сколь­ких чётных чисел;

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

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

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

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

Аналоги к заданию № 5375: 5407 5439 5535 ... Все

Источник: ЕГЭ по ин­фор­ма­ти­ке 30.05.2013. Ос­нов­ная волна. Даль­ний Во­сток. Ва­ри­ант 1