CF2037E.Kachina's Favorite Binary String

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是一道交互题。

卡齐娜有一个长为 nn 的 01 串 ss。她定义 f(l,r)f(l,r) 为子段 slsl+1⋯srs_ls_{l+1}\cdots s_r 中等于 01\texttt{01} 的子序列的个数。子序列不要求连续;两个位置不同的子序列被认为是 不同 的,即便它们含有相同的字符序列。

你需要通过向卡齐娜提问来猜出 ss。每次提问,你可以选择两个下标 l,r(1≤l<r≤n)l,r(1\le l < r\le n),询问她 f(l,r)f(l,r) 的值。你最多提问 nn 次。如果 ss 不可能在 nn 次询问内确定,输出 IMPOSSIBLE\texttt{IMPOSSIBLE}。

输入格式

第一行一个整数 t(1≤t≤103)t(1\le t\le 10^3) — 测试数据的组数。

每组测试数据一行一个整数 n(2≤n≤104)n(2\le n\le 10^4) — 01 串 ss 的长度。

保证各组测试数据 nn 的总和不超过 10410^4。

输出格式

每次提问,按照以下格式输出一行(不含括号):

  • ? l r(1≤l<r≤n)\texttt{? l r}(1\le l < r\le n)

测试程序会返回一个整数 f(l,r)f(l,r)。当你确定答案后,按照以下格式输出一行:

  • 如果 ss 无法确定,输出 "! IMPOSSIBLE"\texttt{"! IMPOSSIBLE"}
  • 否则输出 "! s"\texttt{"! s"}

输出答案不算一次提问。

输入输出样例

  • 输入#1

    2
    5
    
    4
    
    0
    
    1
    
    2
    
    2
    
    0

    输出#1

    ? 1 5
    
    ? 2 4
    
    ? 4 5
    
    ? 3 5
    
    ! 01001
    
    ? 1 2
    
    ! IMPOSSIBLE

说明/提示

第一个样例:

第一次提问中,你询问卡齐娜 f(1,5)f(1,5) 的值,她向输入流中返回 44。

第二次提问中,你询问卡齐娜 f(2,4)f(2,4) 的值。因为在 100\texttt{100} 中没有等于 01\texttt{01} 的子序列,她向输入流中返回 00。

提问四次后,你输出正确答案 01001\texttt{01001}。

第二个样例:

第一次提问中,你询问卡齐娜 f(1,2)f(1,2) 的值,她向输入流中返回 00。

注意到你除了 ? 1 2\texttt{? 1 2} 提不出别的问题了,但 01 串 00\texttt{00} 和 11\texttt{11} 的答案都是 00,无法确定唯一答案,所以输出 IMPOSSIBLE\texttt{IMPOSSIBLE}。

样例仅用于展示交互格式,不代表正解方法。

输入解题思路,AI测评打分。不知道怎么写?

首页