给出一个奇数长度的排列,两两进行位置互换,那最后必有一个元素未交换位置,每次询问可以得到一段区间内的所有数,在15次询问内找到这个数。
思路:我们通过询问可以知道有多少数是原来这个区间的,因为一开始的数组必是1~n排列。那么这些数有两种可能,一是与这个区间的值进行了交换,两一种情况是未进行交换。若没进行交换的元素在这个区间,那么这个区间长度必为奇数,否则没有交换的区间一定在别的区间,对于这样的考虑,使用二分,可以满足在15次询问内得到答案。
(交互题输出后加 “fflush(stdout) or cout.flush()” 是要清空缓存区,直接使用 std::endl 清空也是一样的)
//
即没有被交换的区间一定是偶数,被交换的区间一定是奇数。
#include <bits/stdc++.h>
typedef long long ll;
const int N=1e4+5