Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Конкретні тестові дані, якщо вони не задані, оберіть і наведіть у звіті. Навчальні приклади не призначені для роботи з реальними обліковими даними або сторонніми файлами.
Варіанти
Варіант 1. Облік голосування
1. Початковий рівень. Створити консольну програму. Порахувати навчальні голоси A,B,A,C,A у unordered_map, вивести результат за іменем кандидата. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Опрацювати список пар voter,candidate; повторний voter відхиляти, підсумки зберегти у map. Перевірити порожній список. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Побудувати навчальний реєстр голосів з можливістю зміни голосу одного voter; узгоджувати підсумкові лічильники, не допускаючи від’ємних. Перевірити нічию й недійсного кандидата. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 2. Орфографічна перевірка
1. Початковий рівень. Створити консольну програму. Знайти слова тексту, відсутні в unordered_set словника; слова ASCII, регістр враховується. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Створити словник ASCII-слів, нормалізувати регістр, вивести невідомі слова з кількостями; пунктуацію явно відокремлювати. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Для невідомого ASCII-слова знайти словникові варіанти з однією вставкою, вилученням або заміною літери; прибрати дублікати й сортувати пропозиції. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 3. Групи анаграм
1. Початковий рівень. Створити консольну програму. Згрупувати eat,tea,ate,bat за відсортованими ASCII-літерами в map<string,vector<string>>. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Згрупувати довільний заданий список ASCII-слів в анаграми, ігноруючи регістр; повтори одного слова не додавати. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Побудувати групи анаграм, відсортувати групи за спаданням розміру, за нічиєї за ключем; надрукувати слова, кількість унікальних і частоту кожного початкового слова. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 4. Книга заявок
1. Початковий рівень. Створити консольну програму. Зберегти навчальні заявки купівлі за ціною у map, однакові ціни підсумувати; знайти найкращу ціну. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Створити дві map для купівлі й продажу з цілими цінами та кількостями; показати найкращі рівні, порожню сторону не розіменовувати. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти навчальні заявки купівлі й продажу з цілими цінами та кількостями у двох map і реалізувати зведення, коли найкраща купівля не нижча за продаж; угоду рахувати за ціною продажу, частково виконувати кількість. Це модель даних, не торговий сервіс. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 5. Черга термінових запитів
1. Початковий рівень. Створити консольну програму. У priority_queue зберегти навчальні запити з числовою терміновістю; більший бал обслуговується першим. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Створити чергу умовних записів з пріоритетом і часом надходження; за однакового пріоритету першим є раніший. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Змоделювати у priority_queue чергу навчальних записів з ID і пріоритетом, зміну пріоритету та скасування за ID через версіоновані записи. Ігнорувати застарілі вершини; не використовувати реальні медичні дані чи правила. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 6. LRU-кеш
1. Початковий рівень. Створити консольну програму. Створити кеш на list пар із місткістю 3; пошук переносить знайдене на початок, зайвий хвіст видаляється. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Реалізувати LRU-кеш через list і unordered_map ключ→ітератор, використати splice; перевірити повторний ключ. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Реалізувати LRU-кеш через list і unordered_map ключ→ітератор з місткістю, зокрема 0, resize і статистикою влучань; після кожної операції перевіряти узгодженість словника та списку й відсутність висячих ітераторів. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 7. Календар подій
1. Початковий рівень. Створити консольну програму. Зберегти кілька подій одного дня у multimap з ключами YYYY-MM-DD; вивести день через equal_range. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти календар у multimap і знайти події в замкненому періоді двох ISO-дат через lower_bound/upper_bound. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти календар подій з унікальними ID у multimap з ключами YYYY-MM-DD; реалізувати перенесення події за ID між датами й пошук подій періоду; перевірити повторні дати, відсутній ID і незмінність інших подій. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 8. Маршрути автобусів
1. Початковий рівень. Створити консольну програму. Створити map<string,set<string>> сусідніх зупинок, знайти прямі сполучення без повторів. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти граф зупинок як map<string,set<string>> сусідніх зупинок і знайти сполучення з не більш ніж однією пересадкою; визначити напрямленість і перевірити відсутню зупинку. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти граф зупинок як map<string,set<string>> сусідніх зупинок; за допомогою queue виконати BFS, відновити маршрут з мінімальною кількістю ребер; перевірити цикл і недосяжність. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 9. Конкорданс тексту
1. Початковий рівень. Створити консольну програму. Для трьох заданих рядків створити map слово→set номерів рядків, нумерація з 1, слова ASCII. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Побудувати конкорданс з нормалізацією ASCII-регістру; повтор слова в одному рядку не дублює номер. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Побудувати індекс слова→рядки та знайти рядки, що містять усі слова запиту; перевірити порожній запит, відсутнє слово й повтори в запиті. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 10. Таблиця лідерів
1. Початковий рівень. Створити консольну програму. Зберегти записи score,name у set з порядком бал за спаданням, ім’я за зростанням; показати перших трьох. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти записи score,name у set з порядком бал за спаданням, ім’я за зростанням; реалізувати оновлення балу гравця через вилучення старого запису й вставку нового, не змінюючи елементи set на місці. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Поєднати map ім’я→бал і set рейтингу, підтримати оновлення та видалення. Перевіряти узгодженість обох контейнерів і коректну нічию. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 11. Склад за секціями
1. Початковий рівень. Створити консольну програму. Зберегти map<string,vector<Item>> для двох секцій і вивести кількості товарів. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти склад як map<string,vector<Item>> секцій з товарами, що мають унікальний код; реалізувати переміщення товару за кодом між секціями, відмову для відсутнього коду й тієї самої секції. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти склад як map<string,vector<Item>> секцій з товарами (код, кількість); реалізувати часткове переміщення кількості товару між секціями; об’єднувати однакові коди, не втрачати загальну кількість і не допускати від’ємної. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 12. Друзі в соцмережі
1. Початковий рівень. Створити консольну програму. Зберегти unordered_map користувач→unordered_set друзів і знайти спільних друзів двох навчальних користувачів. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти unordered_map користувач→unordered_set друзів; підтримати симетричне додавання й видалення дружби, заборонити дружбу із собою та повторні ребра. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти unordered_map користувач→unordered_set друзів; знайти рекомендації друзів другого кола, виключити самого користувача й наявних друзів; впорядкувати за кількістю спільних, за нічиєї за ім’ям. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 13. Розклад потягів
1. Початковий рівень. Створити консольну програму. Зберегти multimap станція→хвилина доби та вивести всі рейси заданої станції. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти розклад як multimap станція→хвилина доби; для станції й часу знайти найближчий рейс не раніше заданого часу; після останнього повідомляти відсутність сьогодні. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти станції, напрямки й час, знайти варіанти з однією пересадкою не менше 10 хв; часи в межах однієї доби, надрукувати всі коректні пари. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 14. Перекладач
1. Початковий рівень. Створити консольну програму. Створити map слова→переклад для навчального ASCII-словника; відсутній ключ не вставляти. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Створити двонапрямні map<string,set<string>> для кількох перекладів; додавання пари оновлює обидві сторони. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти навчальний словник як двонапрямні map<string,set<string>> перекладів; підтримати додавання й видалення пари перекладу, очищення порожніх ключів і частоту запитів; перевірити симетрію словників після кожної зміни. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 15. Місця в літаку
1. Початковий рівень. Створити консольну програму. Зберегти set зайнятих місць 1..10; відхиляти повторне бронювання й неправильний номер. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Поєднати set зайнятих місць із map місце→пасажир; реалізувати скасування й список вільних. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти set зайнятих місць 1..10 і map місце→пасажир; реалізувати пересадку пасажира між місцями як неподільну логічну операцію: якщо нове місце зайняте, старе бронювання зберігається. Перевірити всі відмови. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 16. Черга друку
1. Початковий рівень. Створити консольну програму. У deque зберегти звичайні завдання, додавати пріоритетні на початок; показати порядок виконання. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Реалізувати скасування завдання друку за ID у deque, обробку голови й відмову для порожньої черги. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Створити дві FIFO-черги друку: після не більш ніж двох пріоритетних обслуговувати звичайне, якщо воно є. Перевірити відсутність голодування на заданій послідовності. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 17. Покупки з рецептів
1. Початковий рівень. Створити консольну програму. Об’єднати однакові інгредієнти двох рецептів у map назва→грами, надрукувати суму. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зібрати покупки з ключем пара назва,одиниця; різні одиниці не складати автоматично. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зібрати інгредієнти рецептів у map з ключем пара назва,одиниця; реалізувати масштабування порцій і віднімання наявного запасу; у список покупок включати лише додатний дефіцит, явно узгодити одиниці й округлення. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 18. Розріджена матриця
1. Початковий рівень. Створити консольну програму. Зберегти ненульові елементи у map<pair<int,int>,double>, перевіряти межі індексів. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти ненульові елементи розріджених матриць у map<pair<int,int>,double>; реалізувати додавання матриць однакових розмірів, точний нуль вилучати зі словника. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти ненульові елементи розріджених матриць у map<pair<int,int>,double>; реалізувати множення сумісних матриць, порівняти малий результат із ручним розрахунком, перевірити нульову матрицю й несумісні розміри. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 19. Турнір
1. Початковий рівень. Створити консольну програму. Порахувати очки команд у map за трьома матчами: перемога 3, нічия 1, поразка 0. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти vector матчів і map статистики голів та очок; рейтинг: очки, різниця голів, ім’я. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти матчі з унікальними ID у vector і map статистики команд (очки: перемога 3, нічия 1; голи); реалізувати виправлення результату шляхом перебудови таблиці; відхиляти матч команди із собою й від’ємні голи. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 20. Парковка поверхами
1. Початковий рівень. Створити консольну програму. У deque зберегти вільні місця, видавати перше, повернуте ставити в кінець; перевірити повну парковку. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Поєднати map поверх→deque місць і unordered_map номер авто→місце; заборонити подвійний в’їзд. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти map поверх→deque вільних місць і unordered_map номер авто→місце; реалізувати в’їзд, виїзд і переміщення авто між поверхами з відмовою без змін, якщо місць немає; після операцій перевіряти загальну місткість і унікальність місць. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 21. Відвідувачі сайту
1. Початковий рівень. Створити консольну програму. Порахувати унікальні навчальні IP-рядки в unordered_set; не виконувати мережевих запитів. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Створити map день→set IP і вивести унікальних за день та за весь період. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. За заданими IP і хвилинами утворити сесії: нова після паузи понад 30 хв; впорядкувати записи кожного IP, порахувати сесії та відвідування. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 22. Хімічні формули
1. Початковий рівень. Створити консольну програму. Порахувати атоми у простих формулах H2O і CO2 через map; підтримати символ і необов’язкове додатне число. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Розібрати формули без дужок з одно- й дволітерними символами; відхиляти нульові множники й невідомі символи. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Порахувати молярну масу формул без дужок за заданою навчальною таблицею мас; не підставляти відсутню масу нулем, надрукувати внесок кожного елемента. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 23. Симуляція каси
1. Початковий рівень. Створити консольну програму. У queue зберегти покупців із тривалістю обслуговування, усі приходять у час 0; обчислити час очікування. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Змоделювати одну касу з впорядкованими часами приходу й тривалостями; старт=max(прихід,звільнення), вивести середнє очікування. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Змоделювати дві каси з призначенням до тієї, що раніше звільняється; за нічиєї перша. Перевірити простої, одночасний прихід і порожній список. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 24. Розклад екзаменів
1. Початковий рівень. Створити консольну програму. Зберегти set пар початок,кінець для однієї аудиторії; інтервали напіввідкриті, знайти накладення. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Побудувати map аудиторія→set інтервалів та перевірити конфлікти при додаванні; суміжні події дозволити. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти map аудиторія→set і map група→set напіввідкритих інтервалів екзаменів; при додаванні екзамену перевірити одночасно зайнятість аудиторії й групи; відмова не змінює жоден індекс. Перевірити конфлікт лише однієї з умов. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 25. Інвентаризація бібліотеки
1. Початковий рівень. Створити консольну програму. Зберегти multiset кодів книг і порахувати примірники кожного коду. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти multiset кодів книг бібліотеки; реалізувати списання одного примірника через erase(iterator), а не всієї групи; перевірити відсутній код. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зіставити очікуваний multiset примірників і фактичний, вивести нестачу та надлишок із кратностями; перевірити повний збіг і повтори. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 26. Скасування дій
1. Початковий рівень. Створити консольну програму. Створити стек попередніх повних текстів; після двох змін виконати undo і надрукувати результат. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Реалізувати undo/redo двома stack станів; нова зміна після undo очищує redo. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Створити редактор зі вставкою й видаленням ASCII-підрядка, двома стеками команд та зворотних даних; перевірити порожню історію й нову гілку змін. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 27. Плейлист зі списком
1. Початковий рівень. Створити консольну програму. Створити list назв треків, вивести їх і перемістити останній на початок через splice. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Підтримати перенесення треку за ID між двома playlist через list::splice, без копіювання значень. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти плейлисти як list треків; перенести діапазон треків між списками через splice зі збереженням порядку й перевіркою допустимості позицій; для перенесення всередині одного списку заборонити позицію всередині діапазону. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 28. Хеш-таблиця студентів
1. Початковий рівень. Створити консольну програму. Створити ключ StudentKey{group,number}, == і хеш, зберегти записи в unordered_map. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Зберегти навчальні оцінки студентів в unordered_map з ключем StudentKey{group,number}, власними == і хешем; реалізувати оновлення оцінки за ключем, перевірити однаковий number у різних group. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти записи студентів в unordered_map з ключем StudentKey{group,number}; порівняти власний і навмисно сталий хеш на однакових ключах: результати пошуку мають збігтися; показати bucket_count, load_factor та найбільший кошик, не робити висновків за одним часом. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 29. Облік витрат
1. Початковий рівень. Створити консольну програму. Підсумувати навчальні суми у цілих копійках за категорією через map. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Створити map місяць→map категорія→сума, надрукувати місячні й загальний підсумки. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Зберегти транзакції з ID, місяцем, категорією й сумою в копійках і підсумки map місяць→map категорія→сума; реалізувати виправлення транзакції за ID з перебудовою підсумків; перевірити перенесення між місяцями, від’ємне повернення та незмінність інших категорій. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Варіант 30. Порівняння контейнерів
1. Початковий рівень. Створити консольну програму. Для однакових 1000 чисел порівняти правильність пошуку у vector і set, перевірити наявні й відсутні. Вхідні дані задати в коді; вивести результати операцій і перевірки.
2. Базовий рівень. Створити консольну програму. Виміряти вставку й пошук у vector, set, unordered_set на однакових даних у Release, повторити 5 разів і вивести медіану. Вхідні дані задати в коді; вивести результати операцій і перевірки.
3. Високий рівень. Створити консольну програму. Порівняти 3 розміри даних і 3 контейнери з окремим обліком побудови та пошуку; зафіксувати seed, версію й оптимізацію, результат пошуку використати, пояснити вплив reserve. Вхідні дані задати в коді; вивести результати операцій і перевірки.
Порядок виконання роботи
- Зберіть приклади, порівняйте результати з наведеними.
- Створіть окрему програму для обраного рівня свого варіанта.
- Запишіть вимоги, допустимі дані й очікувані результати до реалізації.
- Перевірте звичайний, порожній і граничний випадки, які мають сенс для задачі.
- Збережіть код, команди збирання й результати перевірок у локальному Git.
Обґрунтуйте обраний контейнер таблицею операцій і складності. Для unordered-контейнерів звіт упорядкуйте окремо; не покладайтеся на порядок кошиків.
Вимоги до звіту
Подайте умову обраного завдання, рішення з поясненням інваріантів, команду збирання, версію MSVC, контрольні дані та справжнє виведення. Для очікуваних помилок відокремте негативний тест від робочої програми. Поясніть причину відмови й виправлення; самого знімка Error List недостатньо.