Паліндромні масті
Обмеження: 4 сек., 256 МіБ
Це інтерактивна задача (де ваша програма взаємодіє з програмою журі через ввід та вивід).
У Зеника з Марічкою є жеребці різних мастей — гніді, вороні, булані та багато інших. Вони (Зеник, Марічка й коні) хочуть зіграти з вами в гру.
Зеник з Марічкою вишикували 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≤l≤r≤n. Зеник і Марічка вам у відповідь скажуть, чи є підрядок slsl+1…sr паліндромом.
Щоб гра була цікавішою, Зеник з Марічкою встановили обмеження — ви можете поставити їм не більше ніж 25000 запитань.
Вхідні дані
Вам задано ціле число n — кількість коней у шерензі.
Після зчитування числа n починається взаємодія між вашою програмою та Зеником з Марічкою, під час якої ваша програма ставить запитання, а Зеник з Марічкою на них відповідають.
Щоб поставити запитання, виведіть «?
l r», де l, r
— цілі числа, що задовольняють 1≤l≤r≤n. Це означатиме, що ви хочете дізнатися, чи підрядок slsl+1…sr є паліндромом.
У відповідь на запитання Зеник з Марічкою дадуть ціле число x (x∈{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#
.
Вихідні дані
Для того, щоб дати відповідь, виведіть рядок у форматі
«!
p», де p — довжина найбільшого підрядка s, що є палідромом. Після цього ваша
програма повинна завершити своє виконання.
Обмеження
1≤n≤7447.
Оцінювання складається з таких блоків:
1 бал за приклад з умови,
17 балів: n≤100,
36 балів: n≤1000, відповідь на задачу — парне число,
21 бал: n≤1000,
25 балів: без додаткових обмежень.
Бали за блок ви отримаєте, тільки якщо ваша програма пройде всі тести з блоку.
Примітки
Нижче наведено приклад взаємодії для n=7, s=cabaaba
.
Ввід | Вивід | Опис |
---|---|---|
7 |
Зеник з Марічкою кажуть число n. | |
? 1 7 |
Учасник запитує, чи є палідромом весь рядок. | |
0 |
Зеник з Марічкою відповідають, що весь
рядок (cabaaba ) не є паліндромом. |
|
? 1 1 |
Учасник запитує, чи є палідромом підрядок s1. | |
1 |
Зеник з Марічкою відповідають, що підрядок
s1 (c ) є
паліндромом. |
|
? 2 3 |
Учасник запитує, чи є палідромом підрядок s2s3. | |
0 |
Зеник з Марічкою відповідають, що підрядок
s2s3 (ab ) не є
паліндромом. |
|
? 2 4 |
Учасник запитує, чи є палідромом підрядок s2s3s4. | |
1 |
Зеник з Марічкою відповідають, що підрядок
s2s3s4 (aba ) є
паліндромом. |
|
? 4 5 |
Учасник запитує, чи є палідромом підрядок s4s5. | |
1 |
Зеник з Марічкою відповідають, що підрядок
s4s5 (aa ) є
паліндромом. |
|
? 2 7 |
Учасник запитує, чи є палідромом підрядок s2s3s4s5s6s7. | |
1 |
Зеник з Марічкою відповідають, що підрядок
s2s3s4s5s6s7
(abaaba ) є паліндромом. |
|
! 6 |
Учасник розуміє, що відповідь дорівнює 6, і виводить її. |