Найти в Дзене
Практика Python

Пример простого решения олимпиадной задачи по информатике.

Условия задачи: Выборы президента США проходят по непрямой схеме. Упрощённо схема выглядит так. Сначала выборы проходят по избирательным округам, на этих выборах голосуют избиратели (то есть все граждане, имеющие право голоса). Затем голосование проходит в коллегии выборщиков, на этих выборах каждый избирательный округ представлен одним выборщиком, который голосует за кандидата, победившего на выборах в данном избирательном округе. Кандидатов в президенты несколько, но реально борьба разворачивается между двумя кандидатами от основных партий, поэтому для победы в выборах кандидату нужно обеспечить строго больше половины голосов в коллегии выборщиков. Но для того, чтобы выборщик проголосовал за данного кандидата, необходимо, чтобы в его избирательном округе этот кандидат также набрал строго больше половины голосов избирателей. Известны случаи  (например, в 2016 году), когда из-за такой непрямой избирательной системы в выборах побеждал кандидат, за которого проголосовало меньше избирате

Условия задачи:

Выборы президента США проходят по непрямой схеме. Упрощённо схема выглядит так. Сначала выборы проходят по избирательным округам, на этих выборах голосуют избиратели (то есть все граждане, имеющие право голоса). Затем голосование проходит в коллегии выборщиков, на этих выборах каждый избирательный округ представлен одним выборщиком, который голосует за кандидата, победившего на выборах в данном избирательном округе. Кандидатов в президенты несколько, но реально борьба разворачивается между двумя кандидатами от основных партий, поэтому для победы в выборах кандидату нужно обеспечить строго больше половины голосов в коллегии выборщиков. Но для того, чтобы выборщик проголосовал за данного кандидата, необходимо, чтобы в его избирательном округе этот кандидат также набрал строго больше половины голосов избирателей. Известны случаи  (например, в 2016 году), когда из-за такой непрямой избирательной системы в выборах побеждал кандидат, за которого проголосовало меньше избирателей, чем за другого кандидата, проигравшего выборы.
Пусть коллегия выборщиков состоит из N человек, то есть имеется N избирательных округов. Каждый избирательный округ, в свою очередь, состоит из K избирателей.
Определите наименьшее число избирателей, которое могло проголосовать за кандидата, одержавшего победу в выборах.
Программа получает на вход два целых числа N и K (1 ≤ N ≤ 10**3, 1 ≤ K ≤ 10**6) и должна вывести одно целое число – искомое количество избирателей.

Логика решения задачи:

В этом конкретном случае логика очень проста.

1. Так как все избирательные округа состоят из одинакового количества избирателей, то чтобы получить выборщика, кандидату нужно, чтобы в каждом избирательном округе за него проголосовало половина + 1 избиратель от числа K.

Точно также в коллегии выборщиков за него должно проголосовать половина + 1 выборщик, т.е. условие пункта 1. должно выполниться половина + 1 раз.

Пример:

Пусть в США 10 участков по 30 избирателей. Нужно, чтобы наш кандидат победил на 6 участках. Тогда он получит большинство в коллегии выборщиков. В свою очередь, чтобы победить в на одном участке участке, нам нужно чтобы за него проголосовало 16 избирателей.

Больше времени займут ограничения чисел N и K. Для этого запрашиваем у пользователя данные в бесконечном цикле. Случай если пользователь вводит не число обрабатываем конструкцией try except else, а выход чисел из заданного диапазона конструкцией if.

Если пользователь ввёл что-то неверно, сообщим ему об этом, в противном случае - выходим из цикла.

Обработка ошибок пользователя
Обработка ошибок пользователя

Испытываем работоспособность:

вывод блока обработки ошибок
вывод блока обработки ошибок

Решение:

само решение умещается в одну строчку. Здесь используем целочисленное деление, на тот случай, если числа будут нечетными.

код решения задачи
код решения задачи

результат работы программы:

вывод
вывод

Таким образом в нашем примере, кандидату в президенты США нужно менее трети голосов избирателей (правда они должны быть правильно распределены).

Не составит никакого труда,чтобы подсчитать, что на большом количестве участков хватило бы чуть более четверти голосов. А говорят: "демократия, русские хакеры, Путин, трали-вали..."

-5