gym104090 The 2022 ICPC Asia Hangzhou Regional Programming Contest I. Guess Cycle Length & CF1840G In Search of Truth

题目大意

交互题

有一个长度为n的未知排列p,构成了一个环,初始有一个人在某个位置(未知)

每次询问可以给出一个步数x,然后人会向前走x步(i to (i+x)%n)并返回所在位置的数字

在1e4次询问内找到n,n<=1e9

保证排列在交互前固定

题解

显然,要想知道n就必须要重复走到某个点,否则不同的点之间的关系是未知的

一个简单的想法是,先走k步走出一个长度为k的段,然后k步k步地跳,这样一圈下来一定会走到一开始的段

k取sqrt(n)得2sqrt(n)次,寄?


然后发现很重要的一点是,返回的是数字p[i]

也就是说,如果随机把人丢到一个位置,那么p的期望是n/2

同理,如果随机丢k次,则p的期望是nk/(k+1),和n的误差仅有n/(k+1)

这样就可以搞事了(注意次数≠步数
①先随机丢k次random步,那么可以得到t≈nk/(k+1),可以等价于向后走n/(k+1)步
②然后走k次1步,走出一个长为k的段A
③之后走1次t步,那么会走到段A末尾再向前n/(k+1)步的位置
④最后k步k步跳,大概跳n/k^2次就可以走到段A里面,刚好走完一圈

算一下次数,①k+②k+③1+④n/k^2,当k取1000时就只用3000次,所以k取3000就差不多了
(③④一定可以保证正确性,1e4次数也是用不完的

后记

一样的:CF1840G

我超,原!

posted @ 2022-12-13 12:05  gmh77  阅读(642)  评论(0编辑  收藏  举报