BZOJ1009
来源:互联网 发布:万维软件豪华版 编辑:程序博客网 时间:2024/06/06 07:03
传送门:BZOJ1009
KMP构造转移矩阵,矩阵加速DP。
以后题解都会简单一些。
/************************************************************** Problem: 1009 User: Jerusalem Language: C++ Result: Accepted Time:56 ms Memory:1492 kb****************************************************************/#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <algorithm>#include <iostream>using namespace std;int mod;struct Matrix{ int m[25][25]; Matrix(){ memset(m,0,sizeof(m)); } Matrix C(int a,int b,int c,int d,Matrix o){ Matrix q; for(int i=0;i<a;i++) for(int j=0;j<b;j++) for(int k=0;k<d;k++){ q.m[i][k]+=((m[i][j]*o.m[j][k])%mod); q.m[i][k]%=mod; } return q; }};char num[25];int pre[25];int n,m;int f[25];int g[25];int ans;Matrix E;Matrix M;void Make_Table(){ pre[1]=0;int k=0; for(int i=2;i<=m;i++){ while(k&&num[k+1]!=num[i]) k=pre[k]; if(num[k+1]==num[i]) k++; pre[i]=k; } for(int i=0;i<m;i++) for(int j=0;j<=9;j++){ k=i; while(k&&num[k+1]!=j) k=pre[k]; if(num[k+1]==j) M.m[i][k+1]++; else M.m[i][0]++; } for(int i=0;i<m;i++) E.m[i][i]=1;}Matrix Power(Matrix A,int b){ if(b==0) return E; if(b==1) return A; Matrix mid=Power(A,b/2); if(b%2==0) return mid.C(m,m,m,m,mid); return ((mid.C(m,m,m,m,mid)).C(m,m,m,m,A));}void Solve(){ M=Power(M,n); for(int i=0;i<m;i++){ ans+=M.m[0][i]; ans%=mod; } printf("%d\n",ans);}void Readdata(){ //freopen("loli.in","r",stdin); scanf("%d%d%d\n",&n,&m,&mod); for(int i=1;i<=m;i++) num[i]=getchar()-'0';}void Close(){ fclose(stdin); fclose(stdout);}int main(){ Readdata(); Make_Table(); Solve(); Close(); return 0;}
0 0
- BZOJ1009
- BZOJ1009
- ※bzoj1009
- kmp+dp+matrix bzoj1009
- bzoj1009: [HNOI2008]GT考试
- [bzoj1009][HNOI2008]GT考试
- BZOJ1009 HNOI2008 GT考试
- 【bzoj1009】[HNOI2008]GT考试
- [BZOJ1009][HNOI2008]GT考试
- 【BZOJ1009】GT考试 DP
- [HNOI2008] [BZOJ1009] GT考试
- 【BZOJ1009】【HNOI2008】GT考试
- BZOJ1009: [HNOI2008]GT考试
- bzoj1009【HNOI2008】GT考试
- BZOJ1009 [HNOI2008]GT考试
- bzoj1009: [HNOI2008]GT考试
- BZOJ1009: [HNOI2008]GT考试
- bzoj1009 [HNOI2008]GT考试
- Linux(Ubuntu12)上安装Appium
- HDU 5831(思路题目)
- Android面试准备
- 两个viewport的故事(第二部分)
- hdu1875 畅通工程再续 并查集+kruskal最小生成树
- BZOJ1009
- 图表轴刻度的思路,算法: 转载4【Excel是如何自动计算坐标轴刻度】
- 解决必须要alert一下,才生效的问题
- uva 12304 - 2D Geometry 110 in 1!(几何)
- 输入挂
- 分布式 Nosql
- HDU 1840 Equations
- ToggleButton 实现开关效果
- 打造安全的App!iOS安全系列之 HTTPS