Чисел может быть очень много, но не может быть меньше трёх. Все числа
Условие
Радиотелескоп пытается получать и анализировать сигналы, поступающие из различных участков космоса, при этом различные шумы переводятся в последовательность целых неотрицательных чисел. Чисел может быть очень много, но не может быть меньше трёх. Все числа различны. Хотя бы одно из чисел нечётно. В данных, полученных из одного участка, выделяется основное подмножество чисел. Это непустое подмножество чисел (в него могут войти как одно число, так и все поступившие числа), такое, что их сумма чётна и максимальна среди всех возможных непустых подмножеств с чётной суммой. Если таких подмножеств несколько, то из них выбирается то подмножество, которое содержит наименьшее количество элементов. Вам предлагается написать эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет обрабатывать результаты, приходящие из одного участка, находя основное подмножество. Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи. На вход программе в первой строке подаётся количество сигналов N. В каждой из последующих N строк записано одно целое неотрицательное число, не превышающее 10⁹. Пример входных данных: 5 123 2 1000 0 10 Программа должна вывести в порядке возрастания номера сигналов, которые принадлежат основному подмножеству данного участка. Нумерация элементов последовательности ведётся с единицы. Пример выходных данных для приведённого выше примера входных данных: 2 3 5. Критерии оценивания выполнения задания | Баллы | Программа работает для любых входных данных произвольного размера и находит ответ, не сохраняя входные данные в массиве, размер которого соответствует числу N (количеству сигналов). Программа просматривает входные данные один раз, определяя номер 0, количество нечётных значений и минимальное нечётное число. Затем распечатываются все номера сигналов, кроме сигнала с нулевым значением, а в случае, когда количество нечётных значений чётно, и кроме номера сигнала с минимальным нечётным значением. Допускается наличие в тексте программы до трёх синтаксических ошибок: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается несколько раз, то это считается за одну ошибку) | 4 | Программа работает верно, но входные данные запоминаются в массиве или другой структуре данных (например, контейнер priority_queue, vector, set или map в С++), размер которого соответствует числу N. Этот массив, или массив отобранных номеров, возможно, потом сортируется). При этом общая сложность алгоритма не превышает CN², где C — константа, не зависящая от N. Допускается наличие до пяти синтаксических ошибок, описанных выше. Кроме того, допускается наличие одной содержательной ошибки, например ошибки из следующего списка: 1) ошибка при вводе данных (при условии, что в целом ввод организован правильно); 2) программа неправильно работает при больших значениях введённых чисел (наступает переполнение); 3) допущена ошибка в реализации алгоритма сортировки; 4) используется “<” вместо “<=”, “AND” вместо “OR” и т.п | 3 | Не выполнены условия, позволяющие поставить 3 или 4 балла. Программа работает в целом верно, эффективно или нет. Например, программа использует алгоритм перебора всех возможных подмножеств и сравнивает суммы значений элементов подмножеств. Допускается до семи синтаксических ошибок и не более двух содержательных ошибок (см. примеры в критериях на 3 балла) | 2 | Не выполнены условия, позволяющие поставить 2, 3 или 4 балла. При этом выполнено одно из двух условий. 1. Из описания алгоритма и общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи. 2. Программа правильно работает в одном из важных частных случаев. Допускается любое количество синтаксических ошибок | 1 | Не выполнены критерии, позволяющие поставить 1, 2, 3 или 4 балла | 0 | Максимальный балл | 4 |
Формат задания
Решение по шагам
Как рассуждать
Решение. Основное подмножество состоит из всех значений сигналов, кроме 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 mod 2 <> 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 =
Осталось ещё 3 шага
Шаг 2
Шаг 3
Шаг 4
Бесплатно · займёт минуту