Паліндромні масті
Limits: 4 sec., 256 MiB
Це інтерактивна задача (де ваша програма взаємодіє з програмою журі через ввід та вивід).
У Зеника з Марічкою є жеребці різних мастей — гніді, вороні, булані та багато інших. Вони (Зеник, Марічка й коні) хочуть зіграти з вами в гру.
Зеник з Марічкою вишикували \(n\)
коней у шеренгу. Шеренга задається рядком \(s\) довжини \(n\) з малих латинських букв. Символи рядка
позначають масті коней у порядку шеренги. Наприклад, літера
a
може позначати гнідого жеребця, b
—
вороного, c
— буланого і т.д.
Коли коней вишикувано, Зеник з Марічкою вже не змінюватимуть їхній порядок у шерензі. Отже, рядок \(s\) є зафіксований заздалегідь і не буде змінюватися впродовж гри.
Вам задано число \(n\), але ви не бачите шеренгу і не знаєте рядок \(s\). Гра полягає в тому, щоб відгадати довжину найбільшого підрядка \(s\), що є палідромом.
Рядок \(t\) називається
підрядком рядка \(s\), якщо з
рядка \(s\) можна видалити якусь
(можливо, нульову) кількість символів з початку і якусь (можливо,
нульову) кількість символів з кінця, щоб утворився рядок \(t\). Наприклад, рядки algo
,
tester
, got
, e
є підрядками рядка
algotester
, а рядки lost
,
alcotester
— ні.
Рядок \(t\) називається
паліндромом, якщо він читається однаково зліва направо та
справа наліво. Наприклад, рядки abacaba
,
pylyp
, aa
, b
є паліндромами, а
algotester
, oblasna
— ні.
Ви можете ставити запитання. Кожне запитання — це пара чисел \(l, r\) таких, що \(1 \le l \le r \le n\). Зеник і Марічка вам у відповідь скажуть, чи є підрядок \(s_l s_{l+1} \dots s_r\) паліндромом.
Щоб гра була цікавішою, Зеник з Марічкою встановили обмеження — ви можете поставити їм не більше ніж \(25000\) запитань.
Input
У першому рядку задано ціле числа \(n\) — кількість коней у шерензі.
Після зчитування числа \(n\) починається взаємодія між вашою програмою та Зеником з Марічкою, під час якої ваша програма ставить запитання, а Зеник з Марічкою на них відповідають.
Щоб поставити запитання, виведіть «?
\(\ l \ r\)», де \(l\), \(r\)
— цілі числа, що задовольняють \(1 \le l \le r
\le n\). Це означатиме, що ви хочете дізнатися, чи підрядок \(s_l s_{l+1} \dots s_r\) є паліндромом.
У відповідь на запитання Зеник з Марічкою дадуть ціле число \(x\) (\(x \in \{0, 1\}\)), яке ви повинні зчитати у своїй програмі. Якщо \(x = 1\), то підрядок є паліндромом; якщо \(x = 0\), то ні.
Якщо запитання невалідне (тобто перевищено максимальну кiлькiсть
запитань або параметри запитання є невалiдними), Зеник з Марічкою
скажуть вам у відповідь -1
та припинять гру. У такому
випадку завершiть роботу програми, щоб отримати вердикт
Неправильна вiдповiдь
. Якщо цього не зробити, ви можете
отримати вердикт Помилка часу виконання
.
Подбайте про виклик методу flush
після виводу кожного
рядка. Для цього можна використовувати:
fflush(stdout)
,cout << endl
абоcout.flush()
вC++
;System.out.flush()
вJava
;flush(output)
вPascal
;sys.stdout.flush()
вPython
;Console.Out.Flush()
вC#
.
Output
Для того, щоб дати відповідь, виведіть рядок у форматі
«!
\(\ p\)», де \(p\) — довжина найбільшого підрядка \(s\), що є палідромом. Після цього ваша
програма повинна завершити своє виконання.
Constraints
\(1 \le n \le 7447\).
Оцінювання складається з таких блоків:
1 бал за приклад з умови,
17 балів: \(n \le 100\),
36 балів: \(n \le 1000\), відповідь на задачу — парне число,
21 бал: \(n \le 1000\),
25 балів: без додаткових обмежень.
Бали за блок ви отримаєте, тільки якщо ваша програма пройде всі тести з блоку.
Notes
Нижче наведено приклад взаємодії для \(n=7\), \(s
=\)cabaaba
.
Ввід | Вивід | Опис |
---|---|---|
7 |
Зеник з Марічкою кажуть число \(n\). | |
? 1 7 |
Учасник запитує, чи є палідромом весь рядок. | |
0 |
Зеник з Марічкою відповідають, що весь
рядок (cabaaba ) не є паліндромом. |
|
? 1 1 |
Учасник запитує, чи є палідромом підрядок \(s_1\). | |
1 |
Зеник з Марічкою відповідають, що підрядок
\(s_1\) (c ) є
паліндромом. |
|
? 2 3 |
Учасник запитує, чи є палідромом підрядок \(s_2s_3\). | |
0 |
Зеник з Марічкою відповідають, що підрядок
\(s_2s_3\) (ab ) не є
паліндромом. |
|
? 2 4 |
Учасник запитує, чи є палідромом підрядок \(s_2s_3s_4\). | |
1 |
Зеник з Марічкою відповідають, що підрядок
\(s_2s_3s_4\) (aba ) є
паліндромом. |
|
? 4 5 |
Учасник запитує, чи є палідромом підрядок \(s_4s_5\). | |
1 |
Зеник з Марічкою відповідають, що підрядок
\(s_4s_5\) (aa ) є
паліндромом. |
|
? 2 7 |
Учасник запитує, чи є палідромом підрядок \(s_2s_3s_4s_5s_6s_7\). | |
1 |
Зеник з Марічкою відповідають, що підрядок
\(s_2s_3s_4s_5s_6s_7\)
(abaaba ) є паліндромом. |
|
! 6 |
Учасник розуміє, що відповідь дорівнює \(6\), і виводить її. |
Submit a solution
Element Type | Created | Who | Problem | Compiler | Result | Time (sec.) | Memory (MiB) | # | Actions |
---|
Element Type | Created | Who | Problem | Compiler | Result | Time (sec.) | Memory (MiB) | # | Actions |
---|