|
XIX Всеукраїнська
олімпіада з інформатики
Перший тур
Дільники
За заданим натуральним числом N необхідно обчислити кількість натуральних чисел, які
є дільниками N! (факторіалу числа N). Наприклад, при N=4, N!=4·3·2·1=24. Це
число має такі дільники: 1, 2, 3, 4, 6, 8, 12, 24. Таким чином шукана кількість
дорівнює 8.
Завдання
Напишіть програму DIVISOR, що за натуральним N, знаходить кількість дільників його факторіалу.
Вхідні дані
Єдиний рядок вхідного файлу DIVISOR.DAT містить одне
ціле число N (1≤N≤45).
Вихідні дані
Єдиний рядок вихідного файлу DIVISOR.SOL має
містити одне ціле число – знайдену кількість дільників числа N!
Приклад
вхідних та вихідних даних
DIVISOR.DAT
|
DIVISOR.SOL
|
4
|
8
|
Робочий стіл
На робочому столі операційної системи розташовано N ярликів, кожен з яких заданий цілими координатами x та y, а також назвою. Назва
ярлику складається з маленьких символів латинського алфавіту (a-z). Необхідно
перейти (тобто перемістити виділення) з виділеного ярлика S до ярлика F, за
допомогою клавіатури, використавши найменшу можливу кількість натискань.
Перехід здійснюється за допомогою натискань на клавіші з літерами a-z, або на
стрілки “↑”,“↓”,“←” та “→”.
При натисканні на клавіші з
літерами перехід відбувається за такими правилами:
-
Якщо
на робочому столі є ярлики, назва яких починається на натиснуту літеру, та
виділено однин з них, то перехід відбувається на ярлик, з назвою наступною
у лексикографічному порядку серед тих, які починаються на цю букву (після
останнього, виділення переходить на перший). Тобто, якщо є ярлики a, ab,
b,
то при натисканні a виділення буде переходити лише між a та
ab.
-
Якщо
назва поточного ярлика не починається на обрану літеру, то виділення
переходить на лексикографічно найменший ярлик, що починається на натиснуту
літеру.
-
Якщо
на робочому столі немає ярликів, назва яких починається на натиснуту
літеру, перехід не відбувається.
При натисканні на стрілку перехід відбувається на
найближчий у звичайному геометричному розумінні ярлик, що лежить в секторі стрілки. Визначимо сектор стрілки як прямий кут з вершиною у
виділеному ярлику, бісектрисою якого є промінь, що відповідає стрілці. Якщо ярлик
лежить на границі сектору, то він відноситься до верхнього або нижнього сектору (а не до лівого, або правого).
Якщо у певному секторі немає жодного ярлику, то перехід не відбувається. Якщо
найближчих ярликів декілька, то обирається ярлик з найменшою x координатою, а якщо і таких декілька, то обирається з
найменшою y-координатою.
Наприклад, якщо виділено
ярлик a (див. рисунок), то
при натисканні стрілок можуть відбутись такі переходи:
-
Стрілка
“←”. Виділення переходить на ярлик b, оскільки він є
найближчим у секторі цієї стрілки. При наступному натисканні “←”
виділення перейде на c.
-
Стрілка
“↑”. В секторі стрілки знаходяться ярлики d та e. Виділення перейде на d – цей ярлик ближче.
-
Стрілка
“→”. В секторі “→” знаходиться тільки ярлик g, який і буде виділено.
-
Стрілка
“↓”. В цьому секторі знаходяться ярлики f та h, які рівновіддалені від
a. Виділення
переходить на ярлик h,
оскільки x-координата
цього ярлика менша. Якщо після цього натиснути “↓”, то виділення
залишається на h, оскільки у секторі знизу немає
жодного ярлику.
Завдання
Напишіть програму DESKTOP, що за інформацією про назви
ярликів та їх розташування визначатиме найменшу можливу кількість натискань
клавіатури, за допомогою яких можна з вибраного ярлика дістатися цільового.
Вхідні дані
Перший рядок вхідного файлу DESKTOP.DAT містить
три цілих числа N (1≤N≤1000) – кількість ярликів на робочому столі, S
(1≤S≤N) – номер обраного ярлика, F (1≤F≤N) –
номер ярлика на який потрібно перейти. Кожен з наступних N рядків задає окремий ярлик у такому форматі «x y text», x, y – цілі
числа (0≤x, y≤106),
а текст складається з не більш ніж 50, та не менше ніж з одного маленького
символу латинського алфавіту a-z.
Жодні
два ярлика не мають однакових координат, або ж однакових назв. Координатна
сітка – стандартна, тобто “↑” збільшується y-координата,
а “→” x-координата.
Вихідні дані
Єдиний
рядок вихідного файлу DESKTOP.SOL має містити одне ціле число – мінімальну кількість
натискань на клавіатуру що дозволять перейти з ярлика S
до ярлика F.
Приклад
вхідних та вихідних даних
DESKTOP.DAT
|
DESKTOP.SOL
|
8 1 4
5 4 a
2 3 b
3 2 h
0 3 c
4 6 d
7 6 e
7 2 f
9 6 g
|
1
|
Екзамен
Вчитель має своє ноу-хау що до запобігання
списування на екзамені. Він проводить екзамен у двох аудиторіях, в першій з
яких ймовірність списування низка, а в іншій – висока, та потрібно дуже уважно
стежити за учнями. Першу аудиторію він формує за такими положеннями:
-
Кожен
хлопець повинен сидіти за однією партою з дівчиною. Кількість хлопців
повинна дорівнювати кількості дівчат.
-
У
результаті спостережень вчитель знає які пари хлопців та дівчат не
дозволяють одне одному списувати. Тільки такі пари можуть сидіти за однією
партою.
-
Кількість
учнів, що сидітимуть у першій аудиторії має бути найбільша можлива.
Кожен учень має свій порядковий номер у списку
класу, який включає хлопчиків і дівчат. Варіант вибору учнів у першу аудиторію
можна задати як впорядковану за зростанням послідовність номерів учнів. Для визначеності, знайдемо лексикографічно
найменший серед варіантів вибору учнів у першу аудиторію.
Розглянемо приклад класу з
п’яти учнів. Нехай вчитель знає, що хлопця 1 можна посадити разом з дівчатами
2, 4, 5, а хлопця 3 з дівчатами 2 та 5. Тоді максимальна кількість пар, яку
можна сформувати для того, щоб посадити у першу аудиторію дорівнює 2. Можливі
варіанти вибору можна записати так: (1, 2, 3, 4), (1, 2, 3, 5), (1, 3, 4, 5).
Серед цих варіантів перший є лексикографічно найменшим.
Завдання
Напишіть програму EXAM, що за кількістю учнів у класі, та
набором пар хлопчиків та дівчат, яких вчитель може посадити разом, знаходить найменший
впорядкований список учнів, які будуть писати екзамен у першій аудиторії.
Вхідні дані
Перший рядок вхідного файлу EXAM.DAT містить два
цілих числа N (1≤N≤50) – кількість учнів у класі, M (M≥0) –
кількість пар хлопчиків та дівчат, яких вчитель може посадити за одну парту. Далі
слідує M рядків, кожен з яких містить два номери
у списку класу – номер хлопчика та номер дівчини (саме у такому порядку). У
вхідному файлі пари не повторюються. Всі номери від 1 до N.
Вихідні дані
Єдиний рядок вихідного файлу EXAM.SOL має
містити послідовність цілих чисел впорядкованих за зростанням – список
учнів, які будуть писати іспит у першій аудиторії. Якщо неможна знайти жодної
пари, що зможе писати екзамен у першій аудиторії, вихідний файл повинен містити
один порожній ря |