Главная / ЕГЭ Информатика / Задание №27 / ID 34855
ID 34855 ЕГЭ Информатика Линия №27 СдамГИА ID: 5407 Анализ информационных моделей
✈️ TG ВК Следующая ⏭️
На ускорителе для большого числа частиц производятся замеры скорости каждой из них. Скорость частицы  — это целое число (положительное, отрицательное или 0). Частиц, скорость которых измерена, может быть очень много, но не может быть меньше трёх. Скорости всех частиц различны. В серии обязательно присутствует хотя бы одна частица с отрицательной скоростью.
При обработке результатов в каждой серии эксперимента отбирается основное множество скоростей. Это такое непустое множество скоростей частиц (в него могут войти как скорость одной частицы, так и скорости всех частиц серии), для которого произведение скоростей является минимальным среди всех возможных подмножеств. При нахождении произведения знак числа учитывается. Если есть несколько таких множеств, то берётся то, которое содержит наибольшее количество элементов.
Вам предлагается написать эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет обрабатывать результаты эксперимента, находя основное множество.
Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи.
На вход программе в первой строке подаётся количество частиц N. В каждой из последующих N строк записано одно целое число, по абсолютной величине не превышающее 109. Все N чисел различны.

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

5
123
2
−1000
0
10

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

1 2 3 5
💡 Пошаговый разбор и решение:
Ясно, что основное множество состоит из всех положительных скоростей и всех отрицательных скоростей, если отрицательных скоростей нечётное число. Если же отрицательных скоростей чётное число, то основное множество состоит из всех положительных скоростей и всех отрицательных скоростей, кроме частицы имеющей самую маленькую по модулю отрицательную скорость.
Приведённая ниже программа в переменной parity хранит число частиц, имеющих отрицательную скорость. В переменной ineg хранит порядковый номер наименьшего по модулю отрицательного числа. В переменной zero хранится порядковый номер нуля, если он присутствует во входных данных.
Программа подсчитывает число частиц, имеющих отрицательную скорость и фиксирует номер наименьшего отрицательного числа. Также программа фиксирует присутствие нуля во входных данных. Если число частиц, имеющих отрицательную скорость чётно, то выводятся все номера частиц, кроме номера частицы с самой маленькой по модулю отрицательной скоростью. В противном случае выводятся номера всех частиц. Номер частицы, имеющей нулевую скорость не выводится, если такая частица есть.

Пример программы на языке Паскаль:

program N_27;
var
N: Word;
a: LongInt; {текущее значение скорости}
neg: LongInt; {значение наименьшей по модулю отрицательной скорости}
ineg: Word; {номер частицы, имеющей минимальную по модулю отрицательную скорость}
zero: Word; {номер частицы, имеющей нулевую скорость}
parity: Word; {число частиц с отрицательной скоростью}
i: integer;

begin
neg:=-10*10*10*10*10*10*10*10*10-1;
ineg:=0;
zero:=0;
parity:=0;
readln(N);
for i:=1 to N do
begin
readln(a);
if a neg then
begin
neg:=a;
ineg:=i;
end;
end;
if a=0 then zero:=i;
end;
for i:=1 to N do
begin
if ((parity mod 2=0) and (i<>ineg) and (i<>zero)) then write(i,' ');
if ((parity mod 2=1) and (i<>zero)) then write(i,' ');
end;
end.

Примечание.
Ясно, что в данной программе можно избежать 2N последних проверок, если при помощи нескольких условий проверить как соотносятся номера частиц, имеющих нулевую и минимальную по модулю отрицательную скорость, а затем вывести номера всех частиц кроме этих двух, циклами типа:

for i:=1 to ineg-1 do write(i,' ' );
for i:=ineg+1 to zero-1 do write(i,' ' );
for i:=zero+1 to N do write(i,' ' );

Здесь рассмотрен самый простой случай, когда исключаемые номера не равны единице и друг другу.

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

n = int(input())
s = 0
d = 10001
for i in range(n):
    a, b = map(int,input().split())
    if a > b:
        ma = a
        mi = b
    else:
        ma = b
        mi = a
    s += ma
    if (ma - mi) % 3 > 0 and ma - mi 10000: s = 0
    else: s -= d
print(s)
📚 Похожие разобранные задания по предмету:
ID 140872 • Задание №15
Исполнитель Робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. Между соседн...
Смотреть разбор ↗
ID 33277 • Задание №19
В программе используется фрагмент одномерного целочисленного массива A с индексами от 1 до 10. Значения элемен...
Смотреть разбор ↗
Официальные критерии проверки ФИПИ:
Критерии проверки:

Критерии оценивания выполнения задания | Баллы

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

Программа работает верно, но входные данные запоминаются в массиве или другой структуре данных (например, контейнер priority queue, vector, set или mар в С++), размер которого соответствует числу N. Этот массив, возможно, потом сортируется). При этом общая сложность алгоритма не превышает C7V2. где С - константа, не зависящая от N (например. 10). Допускается наличие до пяти синтаксических ошибок. Кроме того, допускается наличие одной содержательной ошибки, например, ошибки из следующего списка:
1) ошибка при вводе данных (при условии, что в целом ввод организован правильно);
2) программа неправильно работает при больших значениях введенных чисел (наступает переполнение);
3) допущена ошибка в реализации алгоритма сортировки;
4) используется "

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

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

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

Максимальный балл | 4
🔗 Другие задания линии №27 по предмету Информатика:
ID 34669 Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой ... ID 34670 Последовательность натуральных чисел характеризуется числом Х  — наибольшим числом, кратным 14 ... ID 34671 На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются ... ID 34672 Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последо... ID 34673 На вход программы поступает последовательность из N натуральных чисел. Рассматриваются все пары...
← Предыдущее задание 📚 Все задания по предмету Следующее задание →