Екстремальна проблема
Багато задач на змаганнях з програмування є екстремальними в різних аспектах. Ось кілька прикладів:
- Задача, що вирішується шляхом виконання складних математичних обчислень на папері, після чого потрібно вивести одне відоме число, округлене до кількості цифр, зазначених у вхідних даних. - Задача, що займає понад чотири сторінки і вимагає написання системи симуляції, яка відстежує кілька навичок секретних агентів і вибирає найкращу комбінацію для кожної місії. - Задача, для якої доведено, що правильного рішення не існує, але вона все одно була запропонована на змаганні.
Цього разу вам пропонується задача, яка також є екстремальною, оскільки має лише вісім можливих тестів. І, звісно, вона стосується чогось екстремального.
Ми розглядаємо функції двох цілих змінних, визначені на квадраті . Це означає, що ви можете викликати лише якщо і є цілими числами і . Функція має локальний мінімум в точці , якщо виконуються наступні умови:
- ; - ; - ; - .
Локальний максимум визначається аналогічно, але зворотними нерівностями. Функція має плато в точці , якщо виконується хоча б одна з наступних умов:
- ; - ; - ; - .
Зверніть увагу, що всі виклики функції повинні відбуватися в точках з області визначення функції, тобто на квадраті . Зокрема, це означає, що точка на межі цього квадрата не може бути локальним максимумом або локальним мінімумом, але все ще може бути плато.
Вам потрібно знайти функцію, яка має або не має, залежно від вхідних даних:
- кілька локальних максимумів; - кілька локальних мінімумів; - деякі плато.
Зверніть увагу, що "кілька" означає "принаймні два". Також зверніть увагу, що ваша функція повинна бути визначена певним чином; див. розділ Вихідні дані для деталей.
Вхідні дані
Вхід складається з трьох рядків:
- Перший рядок починається з "Multiple local maxima:
" і закінчується або "Yes
", або "No
". Це вказує, чи повинна ваша функція мати кілька локальних максимумів. - Другий рядок починається з "Multiple local minima:
" і закінчується або "Yes
", або "No
", і аналогічно стосується локальних мінімумів. - Третій рядок починається з "Plateaus:
" і також закінчується або "Yes
", або "No
". Це вказує, чи повинна ваша функція мати плато.
Вихідні дані
Вихід повинен складатися з одного рядка, що визначає вашу функцію.
Якщо жодна така функція не може бути представлена у форматі нижче, виведіть "No solution
".
Інакше, виведіть вашу функцію, використовуючи зворотну польську нотацію. Нагадаємо, що зворотна польська нотація — це спосіб опису функції за допомогою деякої машини зі стеком: це послідовність операцій, деякі з яких додають значення в стек, а деякі витягують кілька значень з вершини стека, виконують деякі обчислення і додають результат назад у стек.
Ваша функція повинна містити не більше 1000 токенів, розділених одним пробілом, де кожен токен є одним з наступних:
- Ціла константа в діапазоні від -9
до +9
. Це додасть відповідне число в стек. - Змінна, або x
, або y
. Це додасть значення цієї змінної в стек. - Операція, яка може бути +
, -
, *
, або ^
. Зірочка означає множення, тоді як символ ^
означає піднесення до степеня. Кожна з цих операцій візьме два числа зі стека, застосує операцію і додасть результат назад у стек. Порядок обчислень такий, що "9 5 -
" обчислюється як 4, і аналогічно "x 2 ^
" обчислюється як . Як особливий випадок, обчислюється як .
Зверніть увагу, що коли відбувається одна з наступних речей:
- операція намагається взяти число з порожнього стека; - операція ^
намагається піднести щось до від'ємного степеня; - результат операції перевищує 32-бітове ціле число зі знаком; - або в кінці обчислення розмір стека не дорівнює одному —
ви отримуєте результат Wrong Answer для тесту, де це сталося.
Приклади
Примітка
Приклад відповіді на перший тест кодує функцію . Зверніть увагу, що вона не має локальних максимумів, плато і лише один локальний мінімум.