Задача №3394. Школа олимпийского резерва
Разбор добавил Алексей Белкин
Возможен такой вариант решения задачи:
1. Заводим три массива - по одному для каждого из 1994,1995,1996 годов. После считывания всех баллов, сортируем по убыванию каждый из массивов.
2. Заводим три указателя на последнего зачисленного участника для каждого года. Изначально берем по одному человеку для каждого года. Затем увеличиваем количество зачисленных участников 1995 года так, чтобы минимальный балл 1995 года был больше 1994(за линию). Затем увеличиваем количество участников 1996 года так, чтобы минимальный балл 1996 года был больше 1995(также за линию).
Если не удалось выставить указатели данным образом(либо для какого-то года вообще нет участников, либо, например, единственный участник 1994 года имеет балл, ниже чем у любого из 1995 года...), то выводим -1 и переходим к следующему тесту.
3. Выставив указатели, также за линию пытаемся добавить следующего участника следующим образом:
- добавить из 1996 года, если необходимо(C < текущее количество набранных) и возможно(еще есть не выбранные).
- добавить из 1995 года, если необходимо(B < текущее количество набранных) и возможно(еще есть не выбранные, при выборе данного участника не нарушается условие неравенств баллов между годами).
- добавить из 1994 года, если необходимо(A < текущее количество набранных) и возможно(еще есть не выбранные, при выборе данного участника не нарушается условие неравенств баллов между годами).
- добавить из 1996 года, если необходимо(можно и нужно добавить участника из 1995 года, но его балл не будет больше меньшего балла 1996 года) и возможно(еще есть не выбранные).
- добавить из 1995 года, если необходимо(можно и нужно добавить участника из 1994 года, но его балл не будет больше меньшего балла 1995 года) и возможно(еще есть не выбранные, при выборе данного участника не нарушается условие неравенств баллов между годами).
- добавить из 1994 года, если возможно.
- добавить из 1995 года, если возможно.
- добавить из 1996 года, если возможно.
4. Если таким образом удалось выбрать нужное количество участников, то выводим ответ. Инача выводим -1.
Замечание: разумеется, этот алгоритм следует реализовать за O(A+B+C)=O(N).