打打打打打字机|

realFish

园龄:3年2个月粉丝:3关注:0

SOJ1728 题解

题意

有一个长度为 n 的数列 a0,a1,,an1 以及一个长度为 m 的操作序列 (b0,c0),(b1,c1)(bm1,cm1)

执行 t 次操作,第 i 次操作(从 1 开始编号)执行

swap(a(bimodm+i)modn,a(bimodm+i)modn)

求最终数列。

1n,m105,t1010

题解

考试题,赛时想了一个巨毒瘤的奇环树+倍增解法,结果 200+ 行代码怒调 4h,还 R 了一个点。只能 90pts 遗憾离场……正解用到了一个挺妙的 trick,但出题人认为很典(www被嘲讽了

先考虑 nm 的情形。若我们将操作每 m 个分为一组,除最后一组外的所有组都是相同的。暴力一遍,可以得到一个置换,因为置换有结合律,用快速幂可以 O(nlogt) 解决。其实也可以优化到 O(nlogn),但没必要。

nm 时,第 i 组的每个数在 modn 意义下比第 i1 组大 m。我们这样考虑:做完第 1 组后,将数列向左循环移 m 位,做完剩下的所有组后再移回来。由于操作是 swap,结果不变。那么除最后一组外的所有组又相同了。如上操作,最后循环右移 tm×m 即可。

本文作者:realFish

本文链接:https://www.cnblogs.com/fish07/p/17083878.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   realFish  阅读(24)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起