1 Поиск лучших учеников или игроков

advertisement
Поиск лучших учеников или игроков
1
Соревнования по игре «Тетрис-онлайн» проводятся по следующим правилам:
1. Каждый участник регистрируется на сайте игры под определённым игровым именем. Имена
участников не повторяются.
2. Чемпионат проводится в течение определённого времени. В любой момент этого времени
любой зарегистрированный участник может зайти на сайт чемпионата и начать зачётную игру. По
окончании игры её результат (количество набранных очков) фиксируется и заносится в протокол.
3. Участники имеют право играть несколько раз. Количество попыток одного участника не
ограничивается.
4. Окончательный результат участника определяется по одной, лучшей для данного участника
игре.
5. Более высокое место в соревнованиях занимает участник, показавший лучший результат.
6. При равенстве результатов более высокое место занимает участник, раньше показавший
лучший результат.
В ходе соревнований заполняется протокол, каждая строка которого описывает одну игру и
содержит результат участника и его игровое имя. Протокол формируется в реальном времени по
ходу проведения чемпионата, поэтому строки в нём расположены в порядке проведения игр: чем
раньше встречается строка в протоколе, тем раньше закончилась соответствующая этой строке
игра.
Спонсор чемпионата предоставил призы различной ценности для награждения К лучших игроков (К<=20). Если участников окажется меньше К, призами награждаются все. Вам необходимо
написать эффективную, в том числе по памяти, программу, которая по данным протокола определяет К лучших игроков и занятые ими места.
Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый
язык программирования и его версию.
Описание входных данных
Первая строка содержит числа К — количество имеющихся призов и N — общее количество
строк протокола.
Каждая из следующих N строк содержит записанные через пробел результат участника (целое
положительное число, не превышающее 100 миллионов) и игровое имя (имя не может содержать
пробелов). Строки исходных данных соответствуют строкам протокола и расположены в том же
порядке, что и в протоколе.
Описание выходных данных
Программа должна вывести имена и результаты К лучших игроков в порядке занятых мест по
форме, приведённой ниже в примере. Если игроков окажется меньше К, нужно вывести данные
обо всех игроках.
Пример входных данных:
6 15
69485 Jack
95715 qwerty
95715 Alex
83647 M
197128 qwerty
95715 Jack
93289 Alex
95715 Alex
95715 M
32768 BilboBaggins
99824 TetrisMaster
45482 BilboBaggins
62123 BilboBaggins
77623 M
56791 Champion
Пример выходных данных для приведённого выше примера входных данных:
1. qwerty (197128)
2. TetrisMaster (99824)
3. Alex (95715)
4. Jack (95715)
5. M (95715)
6. BilboBaggins (62123)
Источник: МИОО: Тренировочная работа по информатике 22.03.2013 вариант ИНФ1401.
2
Муниципальный этап олимпиады по информатике проводился для учеников 7–11-х классов. Все
ученики участвовали в общем конкурсе. Каждый участник олимпиады мог набрать от 0 до 400
баллов. По положению об олимпиаде победителем признаётся участник, набравший наибольшее
количество баллов, при условии, что им набрано больше половины возможных баллов. Победителей может быть несколько, если это количество баллов наберут несколько человек; а может и не
быть совсем, если никто не наберёт больше половины.
Напишите эффективную по времени работы и по используемой памяти программу (укажите
используемую версию языка программирования, например Borland Pascal 7.0), которая будет определять фамилию и имя лучшего участника, не ставшего победителем олимпиады. Если следующий
за баллом победителей один и тот же балл набрали несколько человек или если победителей нет,
а лучших участников несколько (в этом случае они же являются искомыми), то должно выдаваться
только число искомых участников. Гарантируется, что искомые участники (участник) имеются. На
вход программе сначала подаётся число участников олимпиады N (N<10000).
В каждой из следующих N строк находится результат одного из участников олимпиады в следующем формате:
<Фамилия> <Имя> <класс> <баллы>,
где <Фамилия> — строка, состоящая не более чем из 20 непробельных символов; <Имя> — строка, состоящая не более чем из 15 непробельных символов; <класс> — число от 7 до 11;
<баллы> — целое число от 0 до 400 набранных участником баллов. <Фамилия> и <Имя>, <Имя>
и <класс>, а также <класс> и <баллы> разделены одним пробелом.
Пример входной строки:
Иванов Пётр 10 275
Программа должна выводить через пробел Фамилию и Имя искомого участника или их число.
Пример выходных данных:
Кузнецов Иван
Второй вариант выходных данных:
4
Источник: ЕГЭ по информатике 05.05.2014. Досрочная волна. Вариант 1.
Поиск основного подмножества экспериментальных значений
3
Для заданной последовательности целых чисел необходимо найти максимальную сумму квадратов
двух её элементов, номера которых различаются не менее чем на 10. Значение каждого элемента
последовательности не превышает 100. Количество элементов последовательности не превышает
10000.
Вам предлагаются два задания, связанные с этой задачей: задание А и задание Б. Вы можете решать оба задания А и Б или одно из них по своему выбору.
Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Если решение
одного из заданий не представлено, то считается, что оценка за это задание составляет 0 баллов.
Задание Б является усложненным вариантом задания А, оно содержит дополнительные требования к программе.
А. Напишите на любом языке программирования программу для решения поставленной задачи,
в которой входные данные будут запоминаться в массиве, после чего будут проверены все возможные пары элементов.
Перед программой укажите версию языка программирования. Обязательно укажите, что программа является решением задания А.
Максимальная оценка за выполнение задания А – 2 балла.
Б. Напишите программу для решения поставленной задачи, которая будет эффективна как по
времени, так и по памяти (или хотя бы по одной из этих характеристик).
Программа считается эффективной по времени, если время работы программы пропорционально количеству элементов последовательности N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.
Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта. Перед программой
укажите версию языка программирования и кратко опишите использованный алгоритм.
Обязательно укажите, что программа является решением задания Б.
Максимальная оценка за правильную программу, эффективную по времени и по памяти, – 4
балла.
Максимальная оценка за правильную программу, эффективную по времени, но неэффективную
по памяти, – 3 балла.
Источник: СтатГрад: Репетиционная работа по информатике 01.04.2015 ИН10701
4
Последовательность натуральных чисел характеризуется числом Y – наибольшим числом, кратным
26 и являющимся произведением двух элементов последовательности с различными номерами.
Напишите эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), находящую число Y для последовательности натуральных чисел, значение каждого элемента которой не превосходит 1000.
Программа должна напечатать найденное число, если оно существует для заданной последовательности, или ноль в противном случае.
Перед текстом программы кратко опишите используемый Вами алгоритм решения.
На вход программе в первой строке подаётся количество чисел N. В каждой из последующих
N строк записано одно натуральное число, не превышающее 1000.
Пример входных данных:
5
40
100
130
28
51
Пример выходных данных для приведённого выше примера входных данных: 13000
Источник: СтатГрад: Тренировочная работа по информатике 28.09.2015 ИН10103
Последовательности букв и чисел
5
6
На вход программе подается набор символов, заканчивающийся точкой (в программе на языке
Бейсик символы можно вводить по одному в строке, пока не будет введена точка, или считывать
данные из файла). Напишите эффективную, в том числе и по используемой памяти, программу
(укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая
сначала будет определять, есть ли в этом наборе символы, соответствующие десятичным цифрам.
Если такие символы есть, то можно ли переставить их так, чтобы полученное число было симметричным (читалось одинаково как слева направо, так и справа налево). Ведущих нулей в числе
быть не должно, исключение – число 0, запись которого содержит ровно один ноль.
Если требуемое число составить невозможно, то программа должна вывести на экран слово
“NO”. А если возможно, то в первой строке следует вывести слово “YES”, а во второй – искомое
симметричное число. Если таких чисел несколько, то программа должна выводить максимальное
из них. Например, пусть на вход подаются следующие символы:
Do not 911 to 09 do.
В данном случае программа должна вывести
YES
91019
По каналу связи передаётся последовательность положительных целых чисел Х1, Х2, ... все числа
не привышают 1000, их количество заранее неизвестно. Каждое число передаётся в виде отдельной текстовой строки, содержащей десятичную запись числа. Признаком конца передаваемой последовательности является число 0.
Участок последовательности от элемента ХT до элемента XT+N называется подъёмом, если на
этом участке каждое следующее число больше или равно предыдущему, причем участок нельзя
расширить, т.е.
1) Т = 1 или ХT-1 > ХT
2) XT+N - последний элемент последовательности или XT+N > XT+T+1. Высотой подъёма называется разность XT+N - Х1. Подъём считается значительным, если высота подъёма больше величины
минимального элемента этого подъема.
Напишите эффективную программу, которая вычисляет количество значительных подъемов в
заданной последовательности.
Программа должна вывести результаты в следующей форме:
Получено чисел: ...
Найдено значительных подъемов: ...
Размер памяти, которую использует программа, не должен зависеть от длины переданной последовательности чисел.
Перед текстом программы кратко опишите алгоритм решения задачи.
Пример входных данных:
144
17
21
27
3
7
9
11
25
0
Пример выходных данных для приведённого выше примера входных данных:
Получено чисел: 9
Найдено значительных подъемов: 1
Источник: МИОО: Тренировочная работа по информатике 17.05.2013 вариант ИНФ1601.
Проверка контрольного значения
7
8
По каналу связи передаются положительные целые числа, не превышающие 1000, — результаты
измерений, полученных в ходе эксперимента (количество измерений N известно заранее, гарантируется, что N > 2). После окончания эксперимента передаётся контрольное значение — наибольшее число R, удовлетворяющее следующим условиям:
1) R — сумма двух различных переданных элементов последовательности («различные» означает, что нельзя просто удваивать переданные числа, суммы различных, но равных по величине
элементов допускаются);
2) R — чётное число. В результате помех при передаче как сами числа, так и контрольное
значение могут быть искажены.
Напишите программу (укажите используемую версию языка программирования, например Free
Pascal 2.6.4), которая будет проверять правильность контрольного значения. Программа должна
напечатать отчёт по следующей форме:
Вычисленное контрольное значение:
…
Контроль пройден (или Контроль не пройден)
Постарайтесь, чтобы программа была эффективной. Программа считается эффективной по времени, если время работы программы пропорционально количеству полученных показаний прибора
N, то есть при увеличении N в k раз время работы программы должно увеличиваться не более чем
в k раз. Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.
Перед текстом программы кратко опишите используемый Вами алгоритм решения.
На вход программе в первой строке подаётся количество чисел N (N > 2). В каждой из последующих N строк записано одно натуральное число, не превышающее 1000. В последней строке
записано контрольное значение. Пример входных данных:
6
100
8
33
145
19
84
184
Пример выходных данных для приведённого выше примера входных данных: Вычисленное
контрольное значение: 184.
Источник: СтатГрад: Тренировочная работа по информатике 27.02.2015 вариант
ИН10901
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности.
Каждую минуту прибор передаёт по каналу связи неотрицательное целое число – количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах.
Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора минимальное
нечётное произведение двух показаний, между моментами передачи которых прошло не менее 6
минут. Если получить такое произведение не удаётся, ответ считается равным –1. Количество энергии, получаемое прибором за минуту, не превышает 1000 условных единиц. Общее количество
показаний прибора в серии не превышает 10 000.
Вам предлагается два задания, связанных с этой задачей: задание А и задание Б. Вы можете
решать оба задания или одно из них по своему выбору.
Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Если решение
одного из заданий не представлено, то считается, что оценка за это задание – 0 баллов.
Задание Б является усложнённым вариантом задания А, оно содержит дополнительные требования к программе.
А. Напишите на любом языке программирования программу для решения поставленной задачи,
в которой входные данные будут запоминаться в массиве, после чего будут проверены все возможные пары элементов.
Перед программой укажите версию языка программирования. ОБЯЗАТЕЛЬНО укажите, что программа является решением ЗАДАНИЯ А. Максимальная оценка за выполнение задания А – 2 балла.
Б. Напишите программу для решения поставленной задачи, которая будет эффективна как по
времени, так и по памяти (или хотя бы по одной из этих характеристик).
Программа считается эффективной по времени, если время работы программы пропорционально количеству полученных показаний прибора N, т.е. при увеличении N в k раз время работы
программы должно увеличиваться не более чем в k раз.
Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.
Перед программой укажите версию языка программирования и кратко опишите использованный алгоритм.
ОБЯЗАТЕЛЬНО укажите, что программа является решением ЗАДАНИЯ Б. Максимальная оценка
за правильную программу, эффективную по времени и по памяти, – 4 балла. Максимальная оценка
за правильную программу, эффективную по времени, но неэффективную по памяти, – 3 балла.
НАПОМИНАЕМ! Не забудьте указать, к какому заданию относится каждая из представленных Вами
программ. Входные данные представлены следующим образом. В первой строке задаётся число N
– общее количество показаний прибора. Гарантируется,
что N > 6. В каждой из следующих N строк задаётся одно неотрицательное целое число – очередное
показание прибора.
Пример входных данных:
11
12
45
5
3
17
23
21
20
19
12
26
Программа должна вывести одно число – описанное в условии произведение, либо – 1, если
получить такое произведение не удаётся.
Пример выходных данных для приведённого выше примера входных данных:
95
Источник: ЕГЭ 05.05.2015. Досрочная волна.
Download