menu
person

Задача №2920

На уско­ри­те­ле для боль­шо­го числа ча­стиц про­из­во­дят­ся за­ме­р

Поиск задачи:

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

 

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

 

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

 

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

 

5

 

123

2

 

-1000

 

0

 

10

 

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

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

 

1 2 3 5

 

По­яс­не­ние.

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

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

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

 

var n, i, j, к, с, min, a: longint;

begin

readln(n);

min := 1000000001;

k := 0;

j := 0 ;

с := 0;

for i := 1 to n do

begin

readln(a);

if a = 0 then

j := i;

if a < 0 then

begin

с := с + 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 а

IF а = 0 THEN j =1

IF а < 0 THEN

с = с + 1

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

min = а

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

 

Категория: по информатике | Добавил: Просмотров: 1 | Теги: Об­ра­бот­ка символьных строк | Рейтинг: 0.0/0
Всего комментариев: 0