您好,欢迎来到知库网。
搜索
您的当前位置:首页BZOJ_3930_选数[Number]

BZOJ_3930_选数[Number]

来源:知库网

About Problem

  • The web :
  • The tab : 递推, CQOI

Solve

  • 首先定义状态 f[i] 为在区间 [l , r] 中,选 n 个数,这 n 个数的 gdc 为 i*k 的方案数。
    那么在 [1 , l] 中一共有⌈l / (i*k)⌉ 个 i*k 的倍数,同理有 r / (i*k) 个 i*k 的倍数在 [1 , r] 之间。
    设 a = ⌈l / (i*k)⌉, b = r / (i*k)
    所以一共的方案数为 (b-a+1)^n。
  • 但这中间会有一部分不合法的方案,例如:

1.设 k∈[l , r],那么会选出 {k,k,k,k...k,k,k} (n 个 k 这样的集合,这很显然是不合法的=.=)
所以一共要去掉 (b-a+1) 个方案。
2.k*2*i 是 ki 的倍数,k*4*i 也是 ki 的倍数,但这两个的 gcd 明显不是 ki 而是 2ki,所以显而易见要把gcd为 2ki,3ki,4ki,5ki ... 的余数给去掉
在去重的过程中不会出现第二种情况包含第一种情况,因为 gcd 为 2ki 的方案中也不会包含重复出现的形如 {x,x,x...,x,x}(n 个 x,且 2ki|x ),所以第二种情况去掉的只是新添加的情况[不知道你们看不看得懂,,,反正我是看不懂自己写的,反正就是情况2和情况1不会有交集吧]

综上:


Windows下的公式丑,不要介意><

Maxn可以任选(当然如果你有闲心推一下上界的话也不错,记得在评论里告诉我ZZZ,我很懒,所以我是蒟蒻)
各位大神 OOOOrrrzz

当然这道题的正解貌似是莫比乌斯反演,然而我还懒得学=.=有时间再看一下吧,在友链中贴出一个我认为写得好的的Blog,有兴趣的可以看一下。

友链:

----------------------------------------------- gdjs2 --------------
--------------------------------------------- 2016.3.13 ------------

Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务