BZOJ 1009 KMP思想 + DP + 矩阵快速幂
来源:互联网 发布:网络新技术专题报告 编辑:程序博客网 时间:2024/06/08 14:48
第一次用MarkDown和LaTex,写得有点丑……
本题的坑爹历程给了我一个血的教训:没有真正搞清楚做法之前,不要瞎BB地写题解。不然会造成深陷坑中的严重后果。
题意简述:给定一个字符串s,求出长度为n的不含字串s的字符串t的数量。
这道题是一个非常经典的模型,DP之:
设
接下来考虑
由于我们是要统计数量,所以我们可以枚举第
然后我们发现,每一轮
代码略丑:
// BZOJ 1009 KMP+Matrix#include <cstdio>#include <cstring>#include <algorithm>using namespace std; const int M=25, N=M; #define rep(i,a,b) for (int i=a; i<=b; i++) #define dep(i,a,b) for (int i=a; i>=b; i--) #define read(x) scanf("%d", &x) #define fill(a,x) memset(a, x, sizeof(a)) int mod; struct Matrix { int n, m, a[N][M]; void init(int n, int m) { this->n=n; this->m=m; fill(a, 0); } Matrix operator * (const Matrix B) const { Matrix ret; ret.init(B.n, B.n); rep(i,0,n-1) rep(j,0,n-1) rep(k,0,n-1) ret.a[i][j]=(ret.a[i][j]+a[i][k]*B.a[k][j])%mod; return ret; } Matrix operator ^ (const int k) const { Matrix ret, t=*this; ret.n=n; ret.m=m; int tk=k; fill(ret.a, 0); rep(i,0,ret.n-1) ret.a[i][i]=1; while (tk) { if (tk&1) ret=ret*t; t=t*t; tk>>=1; } return ret; } } A; int f[M], n, m; char st[M]; void get_fail() { f[0]=f[1]=0; int j=0; rep(i,2,m) { while (j && st[j+1]!=st[i]) j=f[j]; if (st[j+1]==st[i]) j++; f[i]=j; } }int main(){ read(n); read(m); read(mod); scanf("%s", st+1); A.init(m, m); get_fail(); rep(i,0,m-1) rep(j,0,9) { int pos=i; while (pos && st[pos+1]-'0'!=j) pos=f[pos]; if (st[pos+1]-'0'==j) pos++; if (pos!=m) A.a[pos][i]=(A.a[pos][i]+1)%mod; } A=A^n; int ans=0; rep(i,0,m-1) ans=(ans+A.a[i][0])%mod; printf("%d\n", ans); return 0;}
0 0
- BZOJ 1009 KMP思想 + DP + 矩阵快速幂
- BZOJ 1009 KMP,DP,矩阵快速幂
- BZOJ 1009 GT考试 KMP+DP+矩阵快速幂
- BZOJ 1009-GT考试(kmp+矩阵快速幂+DP)
- BZOJ 1009 KMP+矩阵快速幂优化DP
- [省选前题目整理][BZOJ 1009][HNOI 2008]GT考试(KMP+DP+矩阵快速幂)
- [KMP DP 矩阵快速幂加速] BZOJ 1009 [HNOI2008]GT考试
- BZOJ 1009: [HNOI2008]GT考试【KMP上DP+矩阵快速幂
- bzoj 1009: [HNOI2008]GT考试(dp+kmp+矩阵快速幂)
- BZOJ 1009: [HNOI2008]GT考试(DP+KMP失配+矩阵快速幂)
- BZOJ KMP+矩阵快速幂 1009: [HNOI2008]GT考试
- BZOJ 1009 GT考试 KMP+矩阵快速幂.
- POJ3734Blocks矩阵快速幂加dp思想
- BZOJ 1009 GT考试 DP+矩阵快速幂
- BZOJ 1009([HNOI2008]GT考试-KMP+矩阵加速Dp)
- 【BZOJ】1009 [HNOI2008]GT考试 KMP+DP+矩阵优化
- [KMP+矩阵快速幂加速]BZOJ 1009——[HNOI2008]GT考试
- bzoj1009(kmp+dp+矩阵快速幂优化)必需复习
- Opencv人脸识别项目简介
- 不用百度地图,不用高德地图,使用原生的android api也可以定位并做相应的优化
- 解析Excel时列号数字转换为字母
- 从第一个字符串中删除第二个字符串中出现的所有字符
- linux下网络连接socket统计工具ss学习小结
- BZOJ 1009 KMP思想 + DP + 矩阵快速幂
- XML操作
- [HDU 4263]Red/Blue Spanning Tree[kruskal]
- 数据结构学习笔记——单链表
- 代理模式
- 走进 MongoDB
- UIPickerView组件的使用之国旗联动——使用XIB自定义组件
- [leetcode]101.Symmetric Tree
- 如何学习JAVA