gym104090 The 2022 ICPC Asia Hangzhou Regional Programming Contest I. Guess Cycle Length
阿新 • • 發佈:2022-12-13
題目大意
互動題
給出一個長度為n的排列p,初始有一個人在某個位置(未知)
每次詢問可以給出一個步數x,然後人會向前走x步並返回所在位置的數字
在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次數也是用不完的