jzoj5843
给定 n 个正整数序列 ,每个序列长度为m。
选择至少 1 个序列,在每个被选择的序列中选择一个元素,求出所有被选择的元素的 gcd。
求所有方案的结果之和,答案对 1e9+7 取模。两种方案不同,当且仅当存在至少一个元素,在一种方案中被选择,在另一种中没有。
這道題看n=20 m=1e5的範圍就知道不可能進行枚舉算法
枚舉是O(m^n)的,一定會tle,得想更加快速的方法
在計數問題中,我們經常會想到容斥原理
而且這道題的數範圍也只有1e5,我們應該想到按照每一個數的值來計算答案
在這道題之中,計算出“每一行能夠不選或只選1個數,但是必須至少選1個數,要求這些選出來的數被k整除”很容易。只要計cnt[i][j]表示第i行有多少個數是j的倍數。
如何求cnt數組,我們可以記錄cnt[i][j],將cnt[i][a[i][j]]全部+1,代表現在,我們已經存儲了a[i][j]被自己整除的方案了
現在我們知道,當一個數是ak的倍數時,這個數同時也是a的倍數,所以我們可以知道,f[i][kj]可以用來更新f[i][j]。
則ans=(cnt[1][k]+1)(cnt[2][k]+1)…(cnt[n][k]+1)-1
在這道題中,一行有cnt[i][k]個數可以選擇,而且這一行可以一個數都不選,有cnt[i][k]+1種方案,全部乘起來就是答案
但是,我們還有可能一個數都沒有選,這種情況計算了進去,所以最後的方案要-1
在這道題中,我們也可以想到類似的思路
記ans[k]表示全局選出的數能夠被k整除的方案數
則ans[k]=(cnt[1][k]+1)(cnt[2][k]+1)…(cnt[n][k]+1)-1
用這個公式可以快速計算出所有的ans
但是,這道題要求求的是gcd==k的個數,這個公式不能滿足要求
因為我們選出的方案中,只代表gcd能夠被k整除,而不可以代表“gcd恰好為k的方案數"
實際上,我們還計算出了gcd為2k,gcd為3k等等的方案數,所以我們需要將其減去
設f[i]表示gcd恰好為i的方案數
則f[i]=ans[i]-f[2i]-f[3i]…-f[(n/i)i]
式子的前一項為"gcd被i整除"的方案數,但是我們不需要gcd為2i,3i…的方案,所以我們在後面將它們減去了。而在這個方程之中,我們可以倒序枚舉i,這樣我們可以保證計算出f[i]前,f[2i],f[3*i]…已經計算出來了
最後,由於題目要求,我們要記錄gcd的和,所以我們要求f[1]*1,f[2]*2…的值
這樣,我們就成功解決了本題
jzoj5843的更多相关文章
随机推荐
- 带你认识那些App可靠性设计
可靠性是软件一个重要的质量属性,它关注的是软件功能持续的可用性,以及出现故障之后是否能够容错,是否能快速的恢复使用. 可靠性六条基本准则 1.故障应在第一时间被检测和感知: 2.能避免的故障都不应该发 ...
- DataStage 九、数据交换到MySQL以及乱码问题
DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进程的启动和停止 DataStage 三.配置ODBC Da ...
- 命名空间namespace ,以及重复定义的问题解析
名字空间是用来划分冲突域的,把全局名字空间划分成几个小的名字空间.全局函数,全局变量,以及类的名字是在同一个全局名字空间中,有时为了防止命名冲突,会把这些名字放到不同的名字空间中去. 首先我们看一下名 ...
- Docker挂载宿主机目录
一.普通方式直接挂载 1.查看已有容器 docker ps 2.进入容器并挂载 docker run -it -v /root/work/docker:/root/hzbtest tomcat:7.0 ...
- 云服务器vps
0.云计算时代,是一个很时髦的词,人们常常谈起,挂在嘴边.其实云计算通俗点就是电脑托管到了远端的机房,然后不用去买配件主机,是摸不到的,但通过网络远程连接,就可以使用云服务器的资源和功能(搭建网站,测 ...
- VMware + LInux + Xshell 连接环境设置(心得体会)
准备好VMware软件,和Linux 和xshell三款软件,下载和安装好,这里VMware是十二,Linux是CentOs 6 ,xshell是5 其实没有什么区别只要版本兼容就行,我们就可以实现远 ...
- hdu1081 To The Max 2016-09-11 10:06 29人阅读 评论(0) 收藏
To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- hdu 1014
我:题都看不懂 路人甲:这是随机数分配题目 路人乙:这是求生成元,求mod N的生成元,即生成元与N互质 路人丙:这是根据给出的递推公式算一下 0~ mod-1之间的数是否都有出现过,如果都出现了,那 ...
- spring mvc后台如何处理ajax的请求,并返回json
spring mvc中有一个注解:@ResponseBody,把这个注解放到ajax请求对应的@RequestMapping(xxx)方法上,在方法体内部,把要返回的json赋给一个String类型的 ...
- 基于注解方式@AspectJ的AOP
启用对@AspectJ的支持 Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置: <aop:aspectj-autoproxy/> 这样Spring就能发现@ ...