Снова подсчёт

И вечный бой.
Подсчёт Покой нам только снится.
        Иосиф Бродский

Упражнения

A: Покер

Даны 5 целых чисел, каждое от 1 до 13. Выведите одну из следующих строк:

Подарок в честь начала учебного года — в этой задаче тесты открытые. Больше такого не будет!

Ввод Вывод
1 3 9 3 2
One Pair
1 5 5 4 4
Two Pairs
1 5 2 4 3
Straight
10 11 12 13 1
Nothing

B: Покер-2

Рассмотрим следующую разновидность покера. В игре участвуют карты \(N\) различных значений от 1 до \(N\), карт каждого из возможных значений бесконечно много. Каждый игрок получает \(N\) карт и смотрит, какое максимальное число карт одного значения у него есть на руках. Пусть у первого игрока на руках есть \(s\) одинаковых карт, а у второго игрока \(t\) одинаковых карт. Тогда если \(s\gt t\), то выиграл первый игрок, если \(s\lt t\), то выиграл второй игрок, иначе оба игрока отбрасывают равное наибольшее число одинаковых карт и процесс повторяется заново до тех пор, пока не будет определён победитель или пока у игроков не кончатся карты, что означает ничью.

По значениям карт двух игроков определите, кто выигрывает.

Первая строка входных данных содержит число \(N\), \(1\le N\le 10^5\). Вторая и третья строка содержат по \(N\) натуральных чисел от 1 до \(N\) каждое — значения карт первого и второго игрока.

Программа должна вывести номер выигрывающего игрока (1 или 2), или число 0 в случае ничьи.

Ввод Вывод
3
1 2 3
1 1 1
2
5
2 3 2 3 3
5 5 5 4 3
1
4
1 2 1 3
3 4 2 2
0

C: Проходной балл (ЕГЭ-2009)

Такая задача предлагалась на ЕГЭ по информатике в 2009 году. Решение должно использовать \(O(1)\) памяти, в частности, это означает, что нельзя создавать массивы, размер которых был бы пропорционален числу строк во входном файле. Сложность решения должна быть \(O(N)\). Максимальное значение суммы баллов за все экзамены считается константой, то есть не влияющей на ассимптотику сложности решения.

Для поступления в вуз абитуриент должен предъявить результаты трех экзаменов в виде ЕГЭ, каждый из них оценивается целым числом от 0 до 100 баллов. При этом абитуриенты, набравшие менее 40 баллов (неудовлетворительную оценку) по любому экзамену из конкурса выбывают. Остальные абитуриенты участвуют в конкурсе по сумме баллов за три экзамена.

В конкурсе участвует \(N\) человек, при этом количество мест равно \(K\). Определите проходной балл, то есть такое количество баллов, что количество участников, набравших столько или больше баллов не превосходит \(K\), а при добавлении к ним абитуриентов, набравших наибольшее количество баллов среди непринятых абитуриентов, общее число принятых абитуриентов станет больше \(K\).

Программа получает на вход количество мест \(K\). Далее идут строки с информацией об абитуриентах, каждая из которых состоит из фамилии и имени (текстовые строки через пробел) и трех чисел от 0 до 100, разделенных пробелами.

Программа должна вывести проходной балл в конкурсе. Выведенное значение должно быть минимальным баллом, который набрал абитуриент, прошедший по конкурсу.

Также возможны две ситуации, когда проходной балл не определен.

Если будут зачислены все абитуриенты, не имеющие неудовлетворительных оценок, программа должна вывести число 0.

Если количество абитуриентов, имеющих равный максимальный балл больше чем \(K\), программа должна вывести число 1.

Ввод Вывод
5
Иванов Сергей 70 70 70
Сергеев Петр 100 100 0
Петров Василий 70 60 70
Васильев Андрей 70 60 70
Андреев Денис 100 30 100
Денисов Роман 50 50 50
Романов Григорий 60 70 70
Григорьев Станислав 50 50 50
Станиславский Иван 40 40 40
200
1
Иванов Сергей 40 40 40
Сергеев Петр 100 100 39
0
1
Иванов Сергей 60 60 60
Сергеев Петр 100 40 40
1

D: Полупроходной балл (ЕГЭ-2009)

Решение должно иметь сложность \(O(N)\) и использовать \(O(1)\) памяти.

В условиях предыдущей задачи определите полупроходной балл, то есть такое значение балла, что количество абитуриентов, набравших балл выше полупроходного, меньше \(K\), а количество абитурентов, набравших балл выше или равный полупроходному, больше \(K\).

Программа должна вывести значение полупроходного балла, если полупроходного балла не существует, программа должна вывести одно число 0.

Ввод Вывод
5
Иванов Сергей 70 70 70
Сергеев Петр 100 100 0
Петров Василий 70 60 70
Васильев Андрей 70 60 70
Андреев Денис 100 30 100
Денисов Роман 50 50 50
Романов Григорий 60 70 70
Григорьев Станислав 50 50 50
Станиславский Иван 40 40 40
150
1
Иванов Сергей 50 50 50
Сергеев Петр 100 100 100
Петров Иван 100 0 100
0

E: Призеры олимпиады (ЕГЭ-2009)

Решение должно иметь сложность \(O(N)\) и использовать \(O(1)\) памяти.

В олимпиаде участвовало \(N\) человек, каждый из которых мог набрать от 0 до 100 баллов. По положению об олимпиаде жюри может наградить не более 45% от числа участников, округляя их число до целого при необходимости вниз.

При этом если последний участник, попавший в 45% набирает столько же баллов, сколько первый участник, не попавший в 45%, то решение по этим участникам, и всем участникам, набравшим такой балл принимается следующим образом:

Все данные участники объявляются призерами, если набранный ими балл больше половины от максимально возможного балла.

Все эти участники не объявляются призерами, если набранный ими балл не больше половины от максимально возможного.

Программа получает на вход информацию об участниках олимпиады (один участник в одной строке). Строка содержит фамилию и имя участника и набранный данным участником балл через пробел.

Программа должна вывести минимальный балл, который получил участник олимпиады, ставший ее призером.

Ввод Вывод
Иванов Сергей 70
Сергеев Петр 30
Петров Василий 40
Васильев Андрей 80
Андреев Денис 50
Денисов Роман 90
Романов Иван 70
Иванов Григорий 60
Григорьев Сергей 100
70
Иванов Сергей 50
Сергеев Петр 70
Петров Василий 40
Васильев Андрей 10
Андреев Денис 50
Денисов Роман 20
Романов Иван 30
Иванов Григорий 70
Григорьев Сергей 100
70
Иванов Сергей 30
Сергеев Петр 60
Петров Василий 20
Васильев Андрей 100
Андреев Денис 30
Денисов Роман 80
Романов Иван 20
Иванов Григорий 40 
Григорьев Сергей 10
40

F: Семипроцентный барьер

В Государственную Думу Федерального Собрания Российской Федерации выборы производятся по партийным спискам. Каждый избиратель указывает одну партию, за которую он отдает свой голос. В Государственную Думу попадают партии, которые набрали не менее 7% от числа голосов избирателей.

Дан список партий и список голосов избирателей. Выведите список партий, которые попадут в Государственную Думу.

В первой строке входного файла написано слово PARTIES:. Далее идет список партий, участвующих в выборах.

Затем идет строка, содержащая слово VOTES:. За ним идут названия партий, за которые проголосовали избиратели, по одному названию в строке. Названия могут быть только строками из первого списка.

Программа должна вывести названия партий, получивших не менее 7% от числа голосов в том порядке, в котором они следуют в первом списке.

Ввод Вывод
PARTIES:
Party one
Party two
Party three
VOTES:
Party one
Party one
Party three
Party one
Party one
Party three
Party two
Party one
Party three
Party three
Party one
Party one
Party three
Party three
Party one
Party one
Party three

G: Упорядочить список партий по числу голосов

Формат входных данных аналогичен предыдущей задаче. Выведите список всех партий, участвовавших в выборах, отсортировав его в порядке убывания количества голосов избирателей, а при равном количестве голосов - в лексикографическом порядке.

Ввод Вывод
PARTIES:
Party one
Party two
Party three
VOTES:
Party one
Party two
Party three
Party two
Party three
Party three
Party two
Party one

H: Выборы Президента

В выборах Президента Российской Федерации побеждает кандидат, набравший свыше половины числа голосов избирателей. Если такого кандидата нет, то во второй тур выборов выходят два кандидата, набравших наибольшее число голосов.

Каждая строка входного файла содержит имя кандидата, за которого отдал голос один избиратель. Известно, что общее число кандидатов не превосходит 20, но в отличии от предыдущих задач список кандидатов явно не задан.

Если есть кандидат, набравший более 50% голосов, программа должна вывести его имя. Если такого кандидата нет, программа должна вывести имя кандидата, занявшего первое место, затем имя кандидата, занявшего второе место.

Ввод Вывод
Полуэкт Варфоломеев
Варфоломей Полуэктов
Полуэкт Варфоломеев
Полуэкт Варфоломеев
Полуэкт Варфоломеев
Варфоломей Виссарионов
Виссарион Полуэктов
Варфоломей Виссарионов
Варфоломей Виссарионов
Полуэкт Варфоломеев
Варфоломей Виссарионов
Полуэкт Варфоломеев

I: Выборы Государственной Думы

Ниже описан механизм пропорционального распределения мест в Государственной Думе, изложенный в статье 83 закона “О выборах депутатов Государственной Думы Федерального Собрания Российской Федерации”, действовавшего в 2011 году.

Необходимо распределить 450 мест между партиями, участвовавших в выборах. Сначала подсчитывается сумма голосов избирателей, поданных за каждую партию и подсчитывается сумма голосов, поданных за все партии. Эта сумма делится на 450, получается величина, называемая “первое избирательное частное” (смысл первого избирательного частного - это количество голосов избирателей, которое необходимо набрать для получения одного места в парламенте).

Далее каждая партия получает столько мест в парламенте, чему равна целая часть от деления числа голосов за данную партию на первое избирательное частное.

Если после первого раунда распределения мест сумма количества мест, отданных партиям, меньше 450, то оставшиеся места передаются по одному партиям, в порядке убывания дробной части частного от деления числа голосов за данную партию на первое избирательное частное. Если же для двух партий эти дробные части равны, то преимущество отдается той партии, которая получила большее число голосов.

На вход программе подается список партий, участвовавших в выборах. Каждая строка входного файла содержит название партии (строка не содержащая пробелы), затем, через пробел, количество голосов, полученных данной партией – число, не превосходящее 108.

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

Ввод Вывод
Party_One 100000
Party_Two 200000
Party_Three 400000
Party_One 64
Party_Two 129
Party_Three 257

J: Гистограмма

Вовочка ломает систему безопасности Пентагона. Для этого ему понадобилось узнать, какие символы в секретных зашифрованных посланиях употребляются чаще других. Для удобства изучения Вовочка хочет получить графическое представление встречаемости символов. Поэтому он хочет построить гистограмму количества символов в сообщении. Гистограмма – это график, в котором каждому символу, встречающемуся в сообщении хотя бы один раз, соответствует столбик, высота которого пропорциональна количеству этих символов в сообщении.

Входной файл содержит зашифрованный текст сообщения. Он содержит строчные и прописные латинские буквы, цифры, знаки препинания, пробелы и переводы строк. Текст содержит хотя бы один непробельный символ. Все строки входного файла не длиннее 200 символов.

Для каждого символа \(c\) кроме пробелов и переводов строк выведите столбик из символов «#», количество которых должно быть равно количеству символов \(c\) c в данном тексте. Под каждым столбиком напишите символ, соответствующий ему. Отформатируйте гистограмму так, чтобы нижние концы столбиков были на одной строке, первая строка и первый столбец были непустыми. Не отделяйте столбики друг от друга. Отсортируйте столбики в порядке увеличения кодов символов.

Ввод Вывод
Hello, world!
     #   
##
#########
!,Hdelorw
Ввод Вывод
Twas brillig, and the slithy toves
Did gyre and gimble in the wabe;
All mimsy were the borogoves,
And the mome raths outgrabe.
         #              
#
#
#
#
# #
# # #
# # ### ####
## ###### ####
##############
############## ##
# # ############## ###
########################
,.;ADTabdeghilmnorstuvwy

K: Поезда

Некоторый поезд в пути следования останавливается на \(N\) станциях (станция номер 1 — начальная, а станция номер \(N\) — конечная). Дан список пассажиров поезда, для каждого из которых известно, на какой станции он садится, а на какой выходит. Определите, на каких перегонах (то есть между какими соседними станциями) в поезде было наибольшее число пассажиров.

Первая строка входного файла содержит количество станций \(N\le10^5\). В следующих строках находится информация о пассажирах в следующем формате:

Фамилия Имя станция_посадки станция_выхода
где Фамилия и Имя– строки, состоящие не более, чем из 20 символов без пробелов, станция_посадки и станция_выхода — числа от 1 до N, при этом номер станции посадки меньше номера станции выхода. Количество пассажиров не превосходит \(10^5\).

Программа должна вывести список перегонов, на которых в поезде было набольшее число пассажиров. Каждый перегон выводится в виде двух последовательных номеров станций, разделенных знаком “-”.

Ввод Вывод
5
Иванов Сергей 1 5
Сергеев Петр 3 5
Петров Кирилл 1 2
1-2
3-4
4-5

L: Школа танцев

В школу бальных танцев профессора Падеграса записались \(n\) учеников — мальчиков и девочек. Профессор построил их в один ряд, и хочет отобрать из них для первого занятия группу стоящих подряд учеников, в которой количество мальчиков и девочек одинаково. Сколько вариантов выбора есть у профессора?

В первой строке задано число \(n\) (\(1 \le n \le 10^6\)). Во второй строке задается описание построенного ряда из мальчиков и девочек — строка из \(n\) символов a и b (символ a соответствует девочке, а символ b — мальчику).

В единственной строке должно содержаться единственное число — количество вариантов выбора требуемой группы.

Решение должно иметь сложность \(O(n)\).

Ввод Вывод
3
bab
2
8
abbababa
13