Avito Cool Challenge 2018
F
Tricky Interactor
Codeforces
2600
原题
← EG →
翻译中…

This is an interactive problem.

翻译中…

Chouti was tired of studying, so he opened the computer and started playing a puzzle game.

翻译中…

Long long ago, the boy found a sequence $s_1, s_2, \ldots, s_n$ of length $n$, kept by a tricky interactor. It consisted of $0$s and $1$s only and the number of $1$s is $t$. The boy knows nothing about this sequence except $n$ and $t$, but he can try to find it out with some queries with the interactor.

翻译中…

We define an operation called flipping. Flipping $[l,r]$ ($1 \leq l \leq r \leq n$) means for each $x \in [l,r]$, changing $s_x$ to $1-s_x$.

翻译中…

In each query, the boy can give the interactor two integers $l,r$ satisfying $1 \leq l \leq r \leq n$ and the interactor will either flip $[1,r]$ or $[l,n]$ (both outcomes have the same probability and all decisions made by interactor are independent from each other, see Notes section for more details). The interactor will tell the current number of $1$s after each operation. Note, that the sequence won't be restored after each operation.

翻译中…

Help the boy to find the original sequence in no more than $10000$ interactions.

翻译中…

"Weird legend, dumb game." he thought. However, after several tries, he is still stuck with it. Can you help him beat this game?

翻译中…

Interaction

翻译中…

The interaction starts with a line containing two integers $n$ and $t$ ($1 \leq n \leq 300$, $0 \leq t \leq n$) — the length of the sequence and the number of $1$s in it.

翻译中…

After that, you can make queries.

翻译中…

To make a query, print a line "? l r" ($1 \leq l \leq r \leq n$), then flush the output.

翻译中…

After each query, read a single integer $t$ ($-1 \leq t \leq n$).

翻译中…
  • If $t=-1$, it means that you're out of queries, you should terminate your program immediately, then you will get Wrong Answer, otherwise the judging result would be undefined because you will interact with a closed stream.
  • If $t \geq 0$, it represents the current number of $1$s in the sequence.
翻译中…

When you found the original sequence, print a line "! s", flush the output and terminate. Print $s_1, s_2, \ldots, s_n$ as a binary string and do not print spaces in between.

翻译中…

Your solution will get Idleness Limit Exceeded if you don't print anything or forget to flush the output.

翻译中…

To flush you need to do the following right after printing a query and a line end:

翻译中…
  • fflush(stdout) or cout.flush() in C++;
  • System.out.flush() in Java;
  • flush(output) in Pascal;
  • stdout.flush() in Python;
  • see documentation for other languages.
翻译中…

Hacks

翻译中…

For hacks, use the following format:

翻译中…

In the first and only line, print a non-empty binary string. Its length will be $n$ and it will be treated as $s_1, s_2, \ldots, s_n$.

翻译中…

For example, the the test corresponding to the example contains a line "0011".

翻译中…

Note

翻译中…

For first query $1,1$, the interactor should flip $[1,1]$ or $[1,4]$. It chose to flip $[1,4]$, so the sequence became 1100.

翻译中…

For second query $1,1$, the interactor should flip $[1,1]$ or $[1,4]$. It again chose to flip $[1,4]$, so the sequence became 0011.

翻译中…

For third query $3,4$, the interactor should flip $[1,4]$ or $[3,4]$. It chose to flip $[3,4]$, so the sequence became 0000.

翻译中…

Q: How does interactor choose between $[1,r]$ and $[l,n]$? Is it really random?

翻译中…

A: The interactor will use a secret pseudorandom number generator. Only $s$ and your queries will be hashed and used as the seed. So if you give the same sequence of queries twice for the same secret string, you will get the same results. Except this, you can consider the choices fully random, like flipping a fair coin. You needn't (and shouldn't) exploit the exact generator to pass this problem.

翻译中…

样例

Input #1
4 2
2
2
0
Output #1
? 1 1
? 1 1
? 3 4
! 0011
InputCopy OutputCopy
题目信息
题号
1081F
时间限制
1 s
内存限制
256 MB
标签
构造
模拟
交互题

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。