logo AlgoBeat OnlineJudge
登录 注册

#215865. [Algo Beat Contest 004 D] Displaced Permutation

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:VJudge(洛谷) 评测方式:VJudge
上传者: 匿名

题目描述

Yet Another Interactive Problem About Permutation


这是一道交互题。

评测系统有一个隐藏的 的排列

每次你可以询问两个整数 使得 。评测系统会执行以下步骤:

  1. 的子段 循环移位一次。
  2. 评测系统会返回一个长度为 序列 ,其中 当且仅当 当前

在本题中,对一个非空序列循环移位一次定义为:将序列首个元素的值插入到序列末尾,并删除序列首个元素。

你的目标是通过一系列操作,使得最终的排列 升序排列,即对于所有 ,有

交互方式

你的程序需要通过标准输入输出与评测系统交互。

首先,程序应读入一个数 ,表示隐藏的排列的长度。接下来,程序应开始询问,每次询问格式为:

? l r

其中 是两个正整数,满足 。每次询问后,评测系统会返回一个长度为 串,你的程序应从标准输入读取该返回值。

当你认为 已经升序排列时,应报告,格式为:

!

输出答案后,你的程序应立即结束。

你最多可以进行 不超过 次询问。如果询问次数超过限制,或者答案错误,或者格式不符合要求,评测系统将判定为错误答案。

注意:每次输出后必须刷新缓冲区,例如 C++ 中使用 cout << endlfflush(stdout),Python 中使用 print(..., flush=True)

你可以忽略交互库的运行时间。

样例

样例输入 1

4

1001

1111

样例输出 1


? 1 4

? 2 3

!

数据范围与提示

样例解释 #1

样例中隐藏的排列 。解释:

  • 询问 变为 ,返回
  • 询问 变为 ,返回
  • 此时你认为 已经升序排序,因此报告。

数据范围

  • 评测系统中隐藏的 是一个 的排列。