CF1584D.Guess the Permutation
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
This is an interactive problem.
Jury initially had a sequence a of length n, such that ai=i.
The jury chose three integers i, j, k, such that 1≤i<j<k≤n, j−i>1. After that, Jury reversed subsegments [i,j−1] and [j,k] of the sequence a.
Reversing a subsegment [l,r] of the sequence a means reversing the order of elements al,al+1,…,ar in the sequence, i. e. al is swapped with ar, al+1 is swapped with ar−1, etc.
You are given the number n and you should find i, j, k after asking some questions.
In one question you can choose two integers l and r (1≤l≤r≤n) and ask the number of inversions on the subsegment [l,r] of the sequence a. You will be given the number of pairs (i,j) such that l≤i<j≤r, and ai>aj.
Find the chosen numbers i, j, k after at most 40 questions.
The numbers i, j, and k are fixed before the start of your program and do not depend on your queries.
这是一个交互式问题。
评测组最初有一个长度为 n 的序列 a,满足 ai=i。
评测组选择了三个整数 i、j、k,满足 1≤i<j<k≤n 且 j−i>1。随后,评测组对序列 a 的两个子段 [i,j−1] 和 [j,k] 分别执行了翻转操作。
对序列 a 的子段 [l,r] 进行翻转,是指将元素 al,al+1,…,ar 的顺序反转,即 al 与 ar 交换,al+1 与 ar−1 交换,依此类推。
你将获得整数 n,需通过提出若干询问来确定 i、j、k 的值。
每次询问中,你可以选择两个整数 l 和 r(满足 1≤l≤r≤n),并查询序列 a 在子段 [l,r] 上的逆序对数量。你将得到满足 l≤i<j≤r 且 ai>aj 的数对 (i,j) 的个数。
你需要在至多 40 次询问内找出所选的 i、j、k。
数字 i、j、k 在你的程序开始运行前即已固定,且不依赖于你提出的任何询问。
输入格式
Each test consists of multiple test cases. The first line contains a single integer t (1≤t≤100) — the number of test cases. Description of the test cases follows.
The single line of each test case contains a single integer n (4≤n≤109). After reading it you should start an interaction process by asking questions for that test case. After giving an answer you should:
- Terminate your program if that is the last test case.
- Proceed to the next test case otherwise.
每个测试包含多个测试用例。第一行包含一个整数 t(1≤t≤100),表示测试用例的数量。随后是各测试用例的描述。
每个测试用例仅占一行,包含一个整数 n(4≤n≤109)。读入该数后,你需要针对该测试用例启动交互过程并提出问题。在给出答案后,你应当:
- 若这是最后一个测试用例,则终止你的程序;
- 否则,继续处理下一个测试用例。
输入输出样例
输入#1
2 5 4 3 3 5 2 2 1
输出#1
? 1 5 ? 2 5 ? 3 5 ! 1 3 5 ? 1 5 ? 2 5 ? 3 5 ! 2 4 5
说明/提示
In the first test case, i=1, j=3, k=5, so the sequence a is [2,1,5,4,3].
In the second test case, i=2, j=4, k=5, so the sequence a is [1,3,2,5,4].
在第一个测试用例中,i=1,j=3,k=5,因此序列 a 为 [2,1,5,4,3]。
在第二个测试用例中,i=2,j=4,k=5,因此序列 a 为 [1,3,2,5,4]。
输入解题思路,AI测评打分。不知道怎么写?