[bzoj1009][HNOI2008]GT考试(dp+矩阵加速+KMP)
来源:互联网 发布:华族经典 知乎 编辑:程序博客网 时间:2024/06/14 00:54
传送门
代码:
/************************************************************** Problem: 1009 User: stone41123 Language: C++ Result: Accepted Time:80 ms Memory:1300 kb****************************************************************/#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#define ll long longusing namespace std;inline int read(){ int x=0;char ch=' ';int f=1; while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar(); if(ch=='-')f=-1,ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*f;}int p;struct matrix{ int n,m; ll a[30][30]; matrix(){ memset(a,0,sizeof(a)); } inline matrix operator * (const matrix& y) const { matrix c; c.n=n; c.m=y.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]=(c.a[i][j]+a[i][k]*y.a[k][j])%p; } } } return c; }}f;int n,m;char ch[30];int P[30];int fail[30];void getfail(){ fail[0]=fail[1]=0; for(int i=1;i<m;i++){ int j=fail[i]; while(j&&P[i]!=P[j])j=fail[j]; if(P[i]==P[j])j++; fail[i+1]=j; } f.n=m; f.m=m; for(int i=0;i<m;i++){ for(int j=0;j<=9;j++){ int k=i; while(k&&P[k]!=j)k=fail[k]; if(P[k]==j)k++; if(k!=m)f.a[i][k]++; } }}matrix ksm(matrix A,ll b){ matrix ans=A; b--; while(b){ if(b&1){ ans=ans*A; } A=A*A; b>>=1; } return ans;}int main(){ scanf("%d %d %d",&n,&m,&p); scanf("%s",ch); for(int i=0;i<m;i++){ P[i]=ch[i]-'0'; } getfail(); f=ksm(f,n); matrix A; A.n=1; A.m=m; A.a[0][0]=1; A=A*f; ll ans=0; for(int i=0;i<m;i++){ ans=(ans+A.a[0][i])%p; } printf("%lld",ans); return 0;}
阅读全文
0 0
- BZOJ1009 [HNOI2008]GT考试(KMP算法+矩阵加速dp)
- [bzoj1009][HNOI2008]GT考试(dp+矩阵加速+KMP)
- BZOJ1009 [HNOI2008]GT考试【kmp+矩阵加速DP】
- 【KMP+矩阵加速】BZOJ1009[HNOI2008]GT考试
- 【bzoj1009】[HNOI2008]GT考试 矩阵+kmp+DP
- bzoj1009 [HNOI2008]GT考试(KMP+DP+矩阵倍增)
- 【BZOJ1009】GT考试(HNOI2008)-DP矩阵优化+KMP
- 【矩阵加速】【数论】【KMP】[BZOJ1009][HNOI2008]GT考试
- 【DP+KMP+矩阵乘法】BZOJ1009(HNOI2008)[GT考试]题解
- 【KMP+DP+矩阵优化】BZOJ1009 [HNOI2008]GT考试
- BZOJ1009: [HNOI2008]GT考试(KMP+矩阵优化DP)
- [矩阵乘法+KMP] BZOJ1009: [HNOI2008]GT考试
- 【BZOJ1009】【codevs2325】GT考试,kmp+矩阵加速DP
- [BZOJ1009][HNOI2008]GT考试(AC自动机+dp+矩阵优化)
- bzoj1009 [ HNOI2008 ] -- KMP+矩阵乘法加速DP
- 【BZOJ1009】[HNOI2008]GT考试【KMP】
- BZOJ 1009([HNOI2008]GT考试-KMP+矩阵加速Dp)
- bzoj1009 GT考试 KMP+矩阵优化DP
- HIbernateAPI -Session与sessionFactory接口及Session对象的获取方式
- <C++>14.构造函数的重载与拷贝构造函数
- PAT 甲级 1085. Perfect Sequence (25)
- 直通BAT面试算法精讲课
- bootstrap 框架
- [bzoj1009][HNOI2008]GT考试(dp+矩阵加速+KMP)
- 朴素贝叶斯模型
- Andrew-Coursera-DL课程-笔记part2-1(Practical aspects of Deep Learning)
- 二维数组中的查找
- 在部署django时踩的坑 uwsgi + nginx 部署django应用
- DP问题—Leetcode 64. Minimum Path Sum
- analytical model、numerical model 和 empirical model 三者的区别
- 图的基础
- 在centos6.5上安装Django1.7.11笔记