Codeforces Round 694 C. Strange Shuffle
$n$个人坐在一圈玩游戏, 分别标号$1 \sim n$. 初始每人手里有$k$张牌($2|k$). 一次洗牌, 每个人都会进行这样的操作: (当前手牌设为$x$)把 $\lfloor\frac{x}{2}\rfloor$ 张牌给左边的人, 把 $\lceil\frac{x}{2}\rceil$ 张牌给右边的人.
然而, 人群中有一个🤡, 每次他只会把所有牌给右边的人.
? p
用来询问当前局面, $p$ 号玩家有几张牌.每次询问后都进行一次洗牌.
任务是用不超过 $1000$ 次询问, 找出🤡,
! p
用来回答找到的🤡.$4 \le n \le 10^5, 2 \le k \le 10^9, 2 | k$
手玩可以发现, 🤡的牌数永远是 $k$, 而且在前 $\frac{n}{2}$ 次洗牌中, 🤡左边的人的牌比 $k$ 少, 右边的比 $k$ 多.
为什么要限制 $\frac{n}{2}$ 呢? 首先, 我们能用的询问很少, 根本到达不了 $\frac{n}{2}$, 所以可以直接假定就是前 $\frac{n}{2}$ 步. 其次, 大于这个数的时候, 就会出现少的和多的交换的情况, 这里不好处理, 我们就不处理.
证明一下: