BZOJ[1009] [HNOI2008]GT考试
了了已久的心结
f[i][j]表示到第i为,长度为j的后缀与不吉利数字的前缀相同,其实这个和一些期望概率的DP类似,利用a数组记录当前j在加上不同的数字之后,可以分别转移至那些状态,用KMP处理一下,然后矩阵快速幂就行了
Code
1 #include <cmath> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <iostream> 6 #include <algorithm> 7 using namespace std; 8 typedef long long LL; 9 int n,m,mod; 10 char s[25]; 11 int nxt[30]; 12 LL a[30][30]; 13 void Getnxt(){ 14 nxt[0]=-1; 15 int i=0,j=-1; 16 while(i<m){ 17 if(j==-1 || s[i]==s[j]){ 18 i++; j++; 19 nxt[i]=j; 20 } 21 else j=nxt[j]; 22 } 23 } 24 void Geta(){ 25 for(int i=0;i<m;i++){ 26 for(int j=0;j<=9;j++){ 27 char c='0'+j; 28 int tmp=i+1; 29 while(tmp!=-1 && s[tmp]!=c) tmp=nxt[tmp]; 30 if(tmp==-1) a[i+1][0]=(a[i+1][0]+1)%mod; 31 else a[i+1][tmp+1]=(a[i+1][tmp+1]+1)%mod; 32 } 33 } 34 a[0][1]=1; a[0][0]=9; 35 } 36 LL f[30]; 37 LL d[30]; 38 void cheng1(){ 39 memset(d,0,sizeof(d)); 40 for(int i=0;i<m;i++){ 41 for(int j=0;j<m;j++){ 42 d[j]+=f[i]*a[i][j]; 43 d[j]%=mod; 44 } 45 } 46 memcpy(f,d,sizeof(d)); 47 } 48 LL e[30][30]; 49 void cheng2(){ 50 memset(e,0,sizeof(e)); 51 for(int i=0;i<m;i++){ 52 for(int j=0;j<m;j++){ 53 for(int k=0;k<m;k++){ 54 e[i][j]+=a[i][k]*a[k][j]; 55 e[i][j]%=mod; 56 } 57 } 58 } 59 memcpy(a,e,sizeof(a)); 60 } 61 void DP(){ 62 int b=n; 63 f[1]=1; f[0]=9; 64 b--; 65 while(b){ 66 if(b&1) cheng1(); 67 b=b>>1; cheng2(); 68 } 69 LL ans=0; 70 for(int i=0;i<m;i++){ 71 ans+=f[i]; ans%=mod; 72 } 73 cout<<ans<<endl; 74 } 75 int main(){ 76 scanf("%d%d%d",&n,&m,&mod); 77 scanf("%s",&s); 78 Getnxt(); 79 Geta(); 80 DP(); 81 82 }
View Code
转载于:https://www.cnblogs.com/FOXYY/p/7677660.html
BZOJ[1009] [HNOI2008]GT考试相关推荐
- BZOJ 1009 [HNOI2008]GT考试
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2154 Solved: 1327 [Submit][Sta ...
- bzoj 1009: [HNOI2008]GT考试(dp+kmp+矩阵快速幂)
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3932 Solved: 2398 [Submit][Sta ...
- BZOJ 1009:[HNOI2008]GT考试
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1009 大意:给一个长度不大于20的数字串,求长度为N(10^9)的所有数字串中不包含该串 ...
- BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路: 真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...
- BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 ...
- BZOJ 1005: [HNOI2008]明明的烦恼
BZOJ 1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线 ...
- GT考试(bzoj 1009)
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0< ...
- BZOJ 1009 GT考试 (AC自动机 + 矩阵乘法加速dp)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 准考证号为\(n\)位数\(X_1X_2....X_n(0<=X_ ...
- [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)
Description 阿 申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学 A1A2...Am(0&l ...
最新文章
- 谢文睿:西瓜书 + 南瓜书 吃瓜系列 8. 软间隔与支持向量回归
- 来呀!AI喊你斗地主——首个搞定斗地主的深度神经网络
- pat1079+1086+1090+1094(树的遍历)感想
- 开发技巧-使用SQL与Navicat快速导出一个自定义的MYSQL数据库字段表格(数据字典)为Word或Excel
- 巨人网络:已组建研发团队对元宇宙游戏开展自研探索
- linux PHP ppt 转图片,php(thinkphp)在linux系统下pdf转png图片【转】
- 红黑树真的没你想的那么难!
- Vue 中的 v-cloak 作用及用法
- python绘制多边形_在python-matplotlib中绘制3D多边形
- 配备 Apple T2 安全芯片的 Mac 电脑怎样用U盘装系统
- python交互式shell之jupyter notebook初步安装使用
- 百度的“知心搜索”揭秘
- MFC界面开发帮助文档:BCG可视化设计器使用指南
- 电商网站开发设计方案、电商网站开发重要性
- 复制pdf文本出现大量换行的解决办法
- dell云存储服务器,dell云存储服务器(戴尔存储服务器)
- 软著申请技巧及注意事项
- 在工业生产安全管理中,人员定位系统能做什么?
- 【Datawhale组队学习Pytorch】Task 完结篇
- 网站SEO从入门到精通