Решение номера 8055 ФИПИ

Региональный этап олимпиады по информатике проводился для учеников 9–11-х классов. Все ученики участвовали в общем конкурсе. Каждый участник олимпиады мог набрать от 0 до 600 баллов. По положению об олимпиаде победители определяются следующим образом.

 

1.Определяются все участники, набравшие наибольшее среди всех участников количество баллов. Они объявляются кандидатами в победители.

 

2.Если число кандидатов составляет не более 25% всех участников олимпиады, все кандидаты считаются победителями.

 

3.Если кандидатов в победители более 25%, то рассматривается количество баллов, набранное кандидатами в победители. Если кандидаты набрали более 300 баллов, все они объявляются победителями. Если балл, набранный кандидатами, не превышает 300 баллов, победителем не признаётся никто.

 

Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например BorlandPascal 7.0), которая будет определять фамилию и имя лучшего участника, не ставшего победителем олимпиады. Если следующий за баллом победителей один и тот же балл набрали несколько человек или если победителей нет, а лучших участников несколько (в этом случае они же являются искомыми), то выдаётся только число искомых участников. Гарантируется, что искомые участники (участник) имеются.

 

На вход программе сначала подаётся число участников олимпиады N (N<10000). В каждой из следующих N строк находится результат одного из участников олимпиады в следующем формате:<Фамилия> <Имя> <класс> <баллы>, где <Фамилия> – строка, состоящая не более чем из 20 непробельных символов; <Имя> – строка, состоящая не более чем из 15 непробельных символов; <класс> – число от 9 до 11; <баллы> – целое число набранных участником баллов (от 0 до 600). <Фамилия> и <Имя>, <Имя> и <класс>, а также <класс> и <баллы> разделены одним пробелом.

Пример входной строки:

Иванов Пётр 10 275

 

Программа должна выводить через пробел фамилию и имя искомого участника или их число. Пример выходных данных:

Кузнецов Иван

 

Второй вариант выходных данных:

4

 

Объяснение

Для решения поставленной задачи, при вводе очередного значения будем выбирать и записывать имя и количество баллов. Сравниваем количество полученных баллов (point) с максимальным количеством (max_point). В конце цикла мы должны получить максимальные баллы (max_point), баллы лучшего участника (best_point), имя победителя (max_point_student), имя лучшего участника (best_point_student), количество победителей (max_point_student_count) и количество лучшего участника (best_point_student_count). Теперь, если количество потенциальных победителей (max_point_student_count) меньше или равно 25% от общего числа участников (N), то все кандидаты – победители, значит выводим имя лучшего участника или количество лучших участников. Если же победителей больше 25%, то сравниваем максимальный результат (max_point) и число 300. Если max_point > 300, то победители есть, значит выводим best_point_student или best_point_student_count. Если же max_point <= 300, то победителей нет и лучшим участником становится потенциальный победитель, в этом случае выводим max_point_student или max_point_student_count.

 

Показать примеры входных и выходных данных

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

6

Иванов Петя 10 125

Семенов Семен 8 280

Губанов Гена 9 210

Петров Алексей 9 106

Лягушкина Марина 10 210

Анюткина Аня 9 210

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

3

 

Второй пример входных данных:

6

Иванов Петя 10 300

Семенов Семен 8 310

Губанов Гена 9 310

Петров Алексей 9 310

Лягушкина Марина 10 310

Анюткина Аня 9 210

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

Иванов Петя

 

Третий пример входных данных:

6

Иванов Петя 10 200

Семенов Семен 8 210

Губанов Гена 9 210

Петров Алексей 9 210

Лягушкина Марина 10 210

Анюткина Аня 9 100

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

4

 

Решение на языке Pascal

Показать решение

 

Решение на языке Python

Показать решение

 

Похожие задачи: 8023

 

Оставить комментарий