CF1299E So Mean题解

通过观察和自己动手模拟,可以得到:

  1. 假如我们询问 nn 次,第 ii 次询问的数恰好不包含 aia_i,则回答是 1 当且仅当 ai=1a_i=1ai=na_i=n

推广一下:

  1. 假如我们已经得到了 1,2,,k,nk+1,,n1,2,\dots,k,n-k+1,\dots,n 的位置,则询问 n2kn-2k 次,第 ii 次询问的数恰好不包含 aia_i 以及所有已知数,则回答是 1 当且仅当 ai=k+1a_i=k+1ai=nka_i=n-k

但是怎么确定哪个是 k+1k+1 哪个是 nkn-k 呢?事实上,

  1. 1,n1,n 的位置可以任意确定,假如不合法最后令 nai+1ain-a_i+1\to a_i 即可。

  2. 11 确定后可以用 nn 次询问确定所有位置的奇偶性,进而确定哪个是 kk,哪个是 nk+1n-k+1

由此,我们可以在 O(n2)O(n^2) 次询问中得到整个排列,可以得到 20%20\% 的分数。

让我们先用以上方法找出 141\sim 4n3nn-3\sim n。考虑用中国剩余定理解决本题:假如知道每个位置的数模上 3,5,7,83,5,7,8 的值就能求出每个位置的精确值。

  1. xx 与两种模三不同余的数对放在一起询问,就能确定 xmod3x\bmod 3
    由此,可以询问最多两次 x,1,2x,1,2x,1,3x,1,3 来求 xmod3x\bmod 3

推广一下,容易发现:

  1. xxkk 种模 kk 不同余的 k1k-1 元数组放在一起询问,就能确定 xmodkx\bmod k
    由此,可以询问最多 4,6,74,6,7 次求出 xmod5,7,8x\bmod 5,7,8

但是非常悲惨地,要找到模 88 的余数,就意味着需要至少求得 15,n4n1\sim 5,n-4\sim n,并且询问次数已经完全不允许了。

怎么办呢?稍微转换下思路:我们使用倍增。

  1. 按照奇偶性,假如是奇数就询问 x,1,2,4x,1,2,4,否则询问 x,1,2,3x,1,2,3,可以用 nn 次询问求出 xmod4x\bmod 4

推广一下:

  1. 按照 xmod4x\bmod 4,分别按照 0,1,2,30,1,2,3 询问不同的七元组,可以可以用 nn 次询问求出 xmod8x\bmod 8

至此,我们花费了 5n+(n+2n3)+(n+4n5+3n5+2n5)+(n+6n7++2n7)+n+n15.324n5n + (n + \frac{2n}{3}) + (n + \frac{4n}{5} + \frac{3n}{5} + \frac{2n}{5}) + (n + \frac{6n}{7} + \dots + \frac{2n}{7}) + n + n \sim 15.324 n 次询问,可以通过 70%70\% 的数据(由于数据随机,你甚至可以拿到 90%90\% 的分数)。我们只需要再稍微优化一下:

  1. 通过 1,2,n,n11,2,n,n-1 确定模 3344 的余数,之后我们只需要验证时可以确定模 1212 的余数。

你还可以找到其他优化,足以通过本题(使用9.你可以把询问次数缩减到 13.67n13.67n,加上其他优化你甚至可以将询问数减少到 13n13n 以下) 。