програмування в С++
Задачі ІІІ етапу Всеукраїнської олімпіади з інформатики |
Добавил(а) Administrator | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
06.02.13 14:22 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Ім'я файлу, який містить вхідні дані: |
text.in |
Им'я вихідного файлу: |
text.out |
Обмеження часу: |
100 мс |
Обмеження пам'яті: |
128 M |
Степан вдало пройшов співбесіду і ось уже як чотири місяці працює на одній із самих престижних ІТ компаній. Прийшов час здавати проект менеджеру і Степан, як істинний студент, все виконує у останню ніч перед здачею. Набирає текст Степан звичайно дуже швидко, але неуважно. От і цього разу останню частину тексту він набрав не звернувши уваги, що випадково натиснув клавішу caps lock. Таким чином великі букви були набрані маленькими, а маленькі великими. Інші символи він набрав вірно. Степан настільки стомився, що немає сил виправити помилки, і він вирішив кілька годин поспати. Допоможіть Степану, доки він спить, напишіть програму, яка виправляє неуважно набраний текст.
Формат вхідних даних: перший рядок вхідного файлу містить неуважно набраний Степаном текст, який містить не більше 500 символів.
Формат вихідних даних: вихідний файл має містити виправлений текст.
Вхідні дані розміщені у файлі text.in |
Результат роботи знаходиться у файлі text.out |
sCHOOL
|
School
|
Ім'я файлу, який містить вхідні дані: |
holy.in |
Им'я вихідного файлу: |
holy.out |
Обмеження часу: |
500 мс |
Обмеження пам'яті: |
128 M |
Скоро день святого Валентина і, Степану як великому прихильнику даного свята, доручили вибрати кульки для прикраси зали. Профорг університету, де навчається Степан, веде строгий перелік усіх кульок, згідно якому в наявності є N однокольорових (що поробиш – бідні студенти) кульок, діаметр i-ї кульки (1 ≤ i ≤ N) дорівнює Di міліметрів. Згідно новим вимогам профкому, залу необхідно прикрасити не менше ніж K кульками. Оскільки профоргу університету не подобається свято закоханих, то вона ввела своє поняття – так званий показник некрасивості – рівний максимально можливому числу Di – Dj при 1 ≤ i, j ≤ M, де M – кількість кульок для зали, а Di – їх діаметр. Допоможіть Степану із N іграшок вибрати М (M ≥ K) так, щоб для вибраних M кульок показник некрасивості був мінімальним.
Формат вхідних даних: перший рядок вхідного файлу містить два натуральних числа N (2 ≤ N ≤ 100 000) і K (2 ≤ K ≤ N) відповідно. Другий рядок містить N цілих чисел Di (1 ≤ Di ≤ 109) – діаметр i-ї кульки.
Формат вихідних даних: вихідний файл має містити значення показника некрасивості, вибраних M кульок.
Пояснення: Приклад 1 - Існує кілька різних варіантів вибору. Степан може вибрати, наприклад, 6 кульок: 3, 5, 6, 4, 7 і 8
Приклад 2- Степан вибере 4 кульки: 1, 5, 3 і 6.
Вхідні дані розміщені у файлі holy.in |
Результат роботи знаходиться у файлі holy.out |
8 5
10 20 10 20 10 10 20 20
|
10
|
6 4
21 12 17 28 16 21
|
5
|
Ім'я файлу, який містить вхідні дані: |
pair.in |
Им'я вихідного файлу: |
pair.out |
Обмеження часу: |
1 с |
Обмеження пам'яті: |
128 M |
Останнім часом Степан дуже цікавиться парами чисел, а крім пар чисел його цікавить найбільший спільний дільник пари чисел, позначимо його як НСД(x, y). Зараз у Степана є ціле число n і його цікавить така інформація: скільки існує пар цілих чисел (i,j), таких що 1 ≤ i, j ≤ n і виконується рівність i = НСД(i, j). Допоможіть йому у вирішенні нелегкої задачі.
Формат вхідних даних: у першому рядку дано ціле число n (1 ≤ n ≤ 106).
Формат вихідних даних: єдиний рядок має містити відповідь на задачу.
Зауваження: У першому прикладі підходящою парою є пара (1, 1), так як НСД(1, 1) = 1.
У другому прикладі підходять 8 пар чисел: (1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (2, 4), (3, 3), (4, 4).
Вхідні дані розміщені у файлі pair.in |
Результат роботи знаходиться у файлі pair.out |
1
|
1
|
4
|
8
|
10
|
27
|
Ім'я файлу, який містить вхідні дані: |
legacy.in |
Им'я вихідного файлу: |
legacy.out |
Обмеження часу: |
2 с |
Обмеження пам'яті: |
128 M |
Степан отримав у спадок від дідуся стоянку з N місць, пронумерованих від 1 до N. Стоянка розбита на дві частини. Перші M місць знаходяться з лівого боку, а інші N - M місць з правого. Кожного дня N жителів цього району паркують свої автомобілі на стоянці Степана. Відомо, що перший житель приходить раніше усіх, потім другий, і так далі, тобто k-й приходить k-м. Також для кожного жителя i відомо, скільки він буде платити, якщо його машину поставлять на j-е місце. Степан придбав розподільник місць, який кожному автомобілю, що приїздить вказує, на який бік паркуватись, після чого автомобіль паркується на мінімальне за номером вільне місце відповідного боку. При цьому Степан вирішив зекономити і не придбав програмне забезпечення для розподільника, тому він працює не оптимально. Степан просить Вас написати програму для цього розподільника, яка максимізує доходи Степана.
Формат вхідних даних: у першому рядку записані два цілих числа N (2 ≤ N ≤ 1000) і M (1 ≤ M < N) – загальна кількість місць на стоянці і кількість місць з лівого боку відповідно. У кожному із наступних N рядків записано по N цілих додатних чисел. j-е число i-го рядка означає, скільки буде платити i-ий житель за місце з номером j на цій стоянці. Кожне з цих чисел не перевищує 106.
Формат вихідних даних: єдиний рядок має містити одне число – максимальний прибуток стоянки.
Зауваження: Не менш чим у 50% тестів N ≤ 30.
Вхідні дані розміщені у файлі legacy.in |
Результат роботи знаходиться у файлі legacy.out |
2 1
3 2
6 4
|
8
|
4 1
4 3 1 1
3 1 1 1
1 1 4 1
1 1 1 2
|
12
|
Ім'я файлу, який містить вхідні дані: |
problem.in |
Им'я вихідного файлу: |
problem.out |
Обмеження часу: |
500 мс |
Обмеження пам'яті: |
128 M |
Степан закохався і вирішив привернути увагу дівчини великою коробкою цукерок. За порадою друзів він поїхав на саму відому кондитерську фабрику ShenRo і дізнався, що великі коробки цукерок мають трикутну форму. Цукерки в цих коробках розташовуються у кілька рядів. У першому ряду знаходиться одна цукерка, у другому – дві, у третьому – три цукерки і так далі. На фабриці випускаються коробки цукерок з любим числом рядів у межах від 1 до N. Степан хоче купити одну із таких коробок. Але є одна проблема: його дівчина засмутиться, якщо кількість цукерок у коробці не буде ділитись націло на M, тому що у цьому випадку комусь із друзів дівчини дістанеться більше цукерок, чим іншим, або ж якісь цукерки залишаться лишніми. Тому Степан вирішив, що число цукерок у коробці має обов’язково ділитись націло на M.
При виборі подарунка Степан зіткнувся з проблемою придбання відповідної коробки цукерок, оскільки можливих варіантів вибору коробки цукерок виявилося надто багато. Не довго думаючи, Степан вирішив звернутись за допомогою до учасників олімпіади.
Вам необхідно по заданих числах N і M знайти число способів вибору коробки цукерок із множини коробок з кількістю рядів від 1 до N. Способи вважаються різними, якщо їм відповідають коробки з різною кількістю рядів цукерок.
Формат вхідних даних: перший рядок вхідного файлу містить два цілих числа N - максимальна кількість рядів цукерок у коробці і M – кількість друзів дівчини Степана (1 ≤ N, M ≤ 2*109) відповідно.
Формат вихідних даних: вихідний файл має містити одне ціле число - кількість різних способів вибору коробки цукерок.
Оцінювання: N, M ≤ 1000 – не менше 35 балів, N, M ≤ 105 – не менше 55 балів.
Вхідні дані розміщені у файлі problem.in |
Результат роботи знаходиться у файлі problem.out |
20 10
|
4
|
53 199
|
0
|
5705 145
|
157
|
Завдання 2 туру ІІІ (обласного) етапу Всеукраїнської олімпіади з інформатики
А - Арифметика
Ім'я файлу, який містить вхідні дані: |
count.in |
Им'я вихідного файлу: |
count.out |
Обмеження часу: |
100 мс |
Обмеження пам'яті: |
128 M |
Молодший брат Степана Мишко навчається у першому класі. Він дуже допитливий і постійно дістає Степана запитаннями: А скільки? А чому? Сьогоднішній день не виключення. Мишко каліграфічно виписує цифри в ряд і запитує: А скільки різних цифр у записі цього числа. На перші приклади Степан швидко знаходив відповідь. Але Мишко чим далі, тим більші числа записував. Це стало для Степана проблемою. Допоможіть Степану, напишіть програму, яка визначає, кількість різних цифр у числі Мишка. Формат вхідних даних: перший рядок вхідного файлу містить одне ціле число N (1 ≤ N ≤ 101000), записане Мишком. Формат вихідних даних: вихідний файл має містити одне число – кількість різних цифр у числі.Приклади
Вхідні дані розміщені у файлі count.in |
Результат роботи знаходиться у файлі count.out |
1233 |
3 |
B- Степан і сірники
Ім'я файлу, який містить вхідні дані: |
matches.in |
Им'я вихідного файлу: |
matches.out |
Обмеження часу: |
100 мс |
Обмеження пам'яті: |
128 M |
Степан дуже полюбляє гратись із сірниками. Але він не балується ними, не розпалює вогонь, а розв'язує різні головоломки. Наприклад, він уміє прирівнювати число дев'ять до числа одинадцять, переклавши лише один сірник. Нещодавно батьки Степана подарували йому декілька наборів, кожен з яких складається з дванадцяти сірників. Хлопчик почав збирати з них різні геометричні фігури. Він вже зібрав багато різних фігур, але тепер йому стало цікаво: з яких наборів можливо склеїти каркас паралелепіпеда за допомогою дванадцяти сірників з набору та клею? Ламати сірники не можна і жоден із сірників не повинен виступати за каркас. Ваше завдання полягає в тому, щоб за відомими довжинами сірників для кожного набору перевірити, чи можна з них склеїти каркас паралелепіпеда. Формат вхідних даних: перший рядок вхідного файлу містить одне ціле число N (1 ≤ N ≤ 100), яке представляє кількість наборів. Далі йдуть N рядків, кожен з яких містить у собі опис набору сірників - дванадцять цілих додатніх чисел не перевищують 109. Формат вихідних даних: вихідний файл має містити N рядків. Для кожного набору сірників виведіть “yes”, якщо з нього можливо склеїти каркас паралелепіпеда, і “no” в іншому випадку.Приклади
Вхідні дані розміщені у файлі matches.in |
Результат роботи знаходиться у файлі matches.out |
2 1 1 1 1 2 2 2 2 3 3 3 3 1 1 1 1 2 2 2 2 3 3 3 4 |
yes no |
C - Задача від Степана
Ім'я файлу, який містить вхідні дані: |
task.in |
Им'я вихідного файлу: |
task.out |
Обмеження часу: |
750 мс |
Обмеження пам'яті: |
128 M |
Перебираючи свої дитячі іграшки, Степан знайшов набір із N різних прямокутників і згадав задачу, яку йому колись задав старенький вчитель математики. Назвемо прямокутник маленьким, якщо знайдеться інший прямокутник з даного набору, яким можна повністю накрити цей прямокутник. При цьому прямокутники можна повертати, але відповідні сторони мають бути паралельними. Наприклад, прямокутник зі сторонами 1 і 10 можна повністю накрити прямокутником 10 і 3, але не можна накрити прямокутником зі сторонами 9 і 9. Прямокутники зі сторонами 10 і 3, а також зі сторонами 9 і 9 накрити не можна, відповідно в наборі із цих трьох прямокутників тільки один маленький. Напишіть програму, яка вирішить згадану Степаном задачу – визначить кількість маленьких прямокутників у даному наборі. Формат вхідних даних: перший рядок вхідного файлу містить одне ціле число N (2 ≤ N ≤ 200000). У кожному з наступних N рядків міститься два цілих додатних числа – розміри одного прямокутника. Усі розміри не перевищують 1000000. Серед даних прямокутників немає однакових. Формат вихідних даних: вихідний файл має містити одне ціле число - кількість маленьких прямокутників у даному наборі.Приклади
Вхідні дані розміщені у файлі task.in |
Результат роботи знаходиться у файлі task.out |
3 1 10 9 9 10 3 |
1 |
4 1 7 2 6 3 5 4 4 |
0 |
D - Штрафи
Ім'я файлу, який містить вхідні дані: |
penalty.in |
Им'я вихідного файлу: |
penalty.out |
Обмеження часу: |
500 мс |
Обмеження пам'яті: |
128 M |
Степан нещодавно купив автомобіль, але водійські права ще не отримав. В зв’язку з цим він не має права на ньому їздити. Але його дружина вже спланувала вихідні, і поїздка до столиці входить в ці плани. Недовго думаючи, Степан знайшов вихід. Відомо, що ДАІ стоять не на всіх дорогах, а лише на тих, які обминути не можна, тому що так вони спіймають більше правопорушників. Відомо, що в країні Степана N міст, і вони з’єднані M дорогами. Зрозуміло, ніякі дві дороги не з’єднують одну й ту саму пару міст (в країні ж розумні люди працюють). Степан живе в місті А, а столиця знаходиться в місті 1. За відсутність водійських прав штраф складає 1000 карбованців. Скажіть, скільки в нього має бути при собі грошей, щоб він міг виплатити всі штрафи. Формат вхідних даних: Перший рядок містить два числа N, M (2 ≤ N ≤ 105 , 1 ≤ M ≤ 105). Інші М рядків містять два числа Xi і Yi, які описують дорогу між містом Xi і містом Yi. В останньому рядку написано число A (2 ≤ A ≤ N) – місто в якому живе Степан. Формат вихідних даних: Виведіть в одному рядку єдине число – кількість карбованців які Степан має мати при собі.Приклади
Вхідні дані розміщені у файлі penalty.in |
Результат роботи знаходиться у файлі penalty.out |
6 7 1 2 2 3 3 1 3 4 4 5 4 6 5 6 6 |
1000 |
E - Ремонт
Ім'я файлу, який містить вхідні дані: |
repair.in |
Им'я вихідного файлу: |
repair.out |
Обмеження часу: |
1 с |
Обмеження пам'яті: |
64 M |
Степан придбав нову квартиру і до приїзду батьків вирішив поклеїти шпалери. На перший погляд все просто, але, коли він приступив до роботи, виявилась невелика проблема – необхідно вирівнювати малюнки на сусідніх полосах шпалер. Як визнаний програміст, Степан сформулював задачу таким чином. Кожну полосу шпалер можна описати її частиною – прямокутником довжиною N і шириною M (щоб отримати повну полосу, цей прямокутник можна багато разів домалювати до самого себе справа і зліва). Для простоти подумки поділимо цей прямокутник на рівні клітинки так, щоб утворилось N рядків і М стовпців. Щоб було ще простіше, рисунок на шпалерах позначимо символами ”.” і ”*” (крапка і зірочка), по одному символу в кожній клітинці. Вам дано опис двох полос шпалер. Допоможіть Степану, напишіть програму, яка визначатиме, на яку мінімальну кількість клітинок потрібно змістити другу полосу вправо, щоб її малюнок співпав з малюнком на першій полосі. Степан придбав такі шпалери, що гарантовано завжди можна це зробити. Формат вхідних даних: перший рядок вхідного файлу містить два цілих числа N і M(1 ≤ N ≤ 20, 1 ≤ M ≤ 100000). Наступні N рядків містять по М символів кожна – опис першої полоси шпалер. Наступні N рядків містять по М символів кожна – опис другої полоси шпалер. Кожен рядок опису шпалер містить тільки символи ”.” і ”*”. Формат вихідних даних: вихідний файл має містити одне число – на яку мінімальну кількість клітинок потрібно змістити другу полосу вправо, щоб її малюнок співпав з малюнком на першій полосі.Приклади
Вхідні дані розміщені у файлі repair.in |
Результат роботи знаходиться у файлі repair.out |
2 5 .*.*. *.*.* *.*.. .*.** |
1 |
1 5 ***.. *..** |
2 |