[矩阵乘法] LOJ#2002. 「SDOI2017」序列计数
来源:互联网 发布:mac怎么全屏 编辑:程序博客网 时间:2024/05/21 09:48
注意到
关于那个质数的限制,只需要
构造
扣去质数直接暴力
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn=20000005,MOD=20170408;int ans,n,m,P,p[maxn],vis[maxn];void getP(){ for(int i=2;i<=m;i++){ if(!vis[i]) p[++p[0]]=i; for(int j=1;j<=p[0]&&(LL)i*p[j]<=m;j++){ vis[i*p[j]]=true; if(i%p[j]==0) break; } }}struct Matrix{ int n,m,a[105][105]; Matrix(){ memset(a,0,sizeof(a)); n=m=0; } Matrix operator * (const Matrix &b){ Matrix c; c.n=n; c.m=b.m; for(int i=0;i<c.n;i++) for(int j=0;j<c.m;j++) for(int k=0;k<m;k++) (c.a[i][j]+=(LL)a[i][k]*b.a[k][j]%MOD)%=MOD; return c; }} T,Ans;Matrix Pow(Matrix a,int b){ Matrix res; res.n=res.m=P; for(int i=0;i<P;i++) res.a[i][i]=1; for(;b;b>>=1,a=a*a) if(b&1) res=res*a; return res;}int main(){ freopen("loj2002.in","r",stdin); freopen("loj2002.out","w",stdout); scanf("%d%d%d",&n,&m,&P); getP(); T=Matrix(); T.n=T.m=P; for(int i=0;i<=P-1&&i<=m;i++) for(int j=0;j<=P-1;j++) (T.a[j][(j+i)%P]+=(m-i)/P+(i>0))%=MOD; Ans=Matrix(); Ans.n=1; Ans.m=P; Ans.a[0][0]=1; Ans=Ans*Pow(T,n); ans=Ans.a[0][0]; for(int i=1;i<=p[0];i++) for(int j=0;j<=P-1;j++) T.a[j][(j+p[i])%P]--; Ans=Matrix(); Ans.n=1; Ans.m=P; Ans.a[0][0]=1; Ans=Ans*Pow(T,n); ans=(ans-Ans.a[0][0])%MOD; printf("%d\n",(ans+MOD)%MOD); return 0;}
阅读全文
0 0
- [矩阵乘法] LOJ#2002. 「SDOI2017」序列计数
- LOj #2002. 「SDOI2017」序列计数 (容斥+dp+矩阵快速幂)
- bzoj 4818: [Sdoi2017]序列计数 动态规划+矩阵乘法
- BZOJ 4818: [Sdoi2017]序列计数 (动态规划+矩阵乘法)
- bzoj 4818 [Sdoi2017]序列计数 矩阵乘法优化dp+容斥
- bzoj4818 [Sdoi2017]序列计数(矩阵)
- BZOJ4818 [Sdoi2017]序列计数
- 4818: [Sdoi2017]序列计数
- 【SDOI2017】序列计数
- BZOJ4818: [Sdoi2017]序列计数
- bzoj4818 [Sdoi2017]序列计数
- 【bzoj4818】[Sdoi2017]序列计数
- bzoj4818【SDOI2017】序列计数 矩阵快速幂+动态规划
- [BZOJ4818][Sdoi2017][容斥原理][矩阵优化DP]序列计数
- bzoj 4818: [Sdoi2017]序列计数(DP+矩阵快速幂)
- loj #100. 矩阵乘法
- loj #2001. 「SDOI2017」树点涂色(LCT)
- 【动态规划20】bzoj4818[sdoi2017]序列计数(dp+矩阵快速幂)
- jquery
- [C#]设置RichTextBox的字体格式:粗体、斜体、下划线 【转】
- Android 之高仿活动时分秒倒计时
- 传智播客C++第四期完整版
- Hadoop分布式下的MapReduce流程及HDFS简单使用
- [矩阵乘法] LOJ#2002. 「SDOI2017」序列计数
- 算法分析与设计之棋盘覆盖问题
- 使用自定义控件
- 使用sql求连续3个月的数据
- 27岁的程序员
- 每周LeetCode算法题(十三)152. Maximum Product Subarray
- HOJ 2577 How to Type(dp)
- 容量、过拟合和欠拟合(个人笔记)
- [launch] is neither a launch file in package [urdf_sim_tutorial] nor is [urdf_sim_tutorial] a launch