[HNOI2008 GT考试]
[关键字]:动态规划 矩阵乘法
[题目大意]:给定一个字符集为(0-9)的字符串T(length<=20),求长度为N的不包含T的字符串的总数。
//==========================================================================
[分析]:首先可以用KMP求next数组的方法求出f[i][j],T串的前i个字符组成的一个串+任意一个字符的后j位和T的前j各字符匹配的方案数。把这个数组乘n遍后f[0][i]就是T的前0
个加上n个字符后i为和T前i位匹配的方案数。ans=Σf[0][i](0<=i<=m-1)。而f数组的n次方可以用快速幂加矩阵乘法快速解决。
[代码]:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> using namespace std;const int MAXN=30;int n,m,MOD; int a[MAXN],p[MAXN]; int temp[MAXN][MAXN],temp2[MAXN][MAXN]; int b[MAXN][MAXN],f[MAXN][MAXN];void Init() {scanf("%d%d%d\n",&n,&m,&MOD);for (int i=1;i<=m;++i) scanf("%c",&a[i]),a[i]-='0';//for (int i=1;i<=m;++i) printf("%d ",a[i]); }void KMP() {int k=0;p[1]=0;for (int i=2;i<=m;++i){while (k>0 && a[i]!=a[k+1]) k=p[k];if (a[i]==a[k+1]) ++k;;p[i]=k;} }void Work() {memset(b,0,sizeof(b));for (int i=0;i<m;++i)for (int j=0;j<=9;++j){int k=i;while (k>0 && a[k+1]!=j) k=p[k];if (a[k+1]==j) ++b[i][k+1]; else ++b[i][0];}memcpy(f,b,sizeof(b)); }void Power(int n) {if (n==1) return;Power(n/2);memset(temp,0,sizeof(temp));for (int i=0;i<m;++i)for (int j=0;j<m;++j)for (int k=0;k<m;++k)temp[i][j]=(temp[i][j]+f[i][k]*f[k][j])%MOD;memcpy(f,temp,sizeof(f)); if (n%2==1){memset(temp2,0,sizeof(temp2));for (int i=0;i<m;++i)for (int j=0;j<m;++j)for (int k=0;k<m;++k)temp2[i][j]=(temp2[i][j]+temp[i][k]*b[k][j])%MOD;memcpy(f,temp2,sizeof(f));} }void Solve() {KMP();//for (int i=1;i<=m;++i) printf("%d ",p[i]);//printf("\n"); Work();/*for (int i=0;i<m;++i){for (int j=0;j<m;++j) printf("%d ",f[i][j]);printf("\n");}*/Power(n);/*for (int i=0;i<m;++i){for (int j=0;j<m;++j) printf("%d ",f[i][j]);printf("\n");}*/int sum=0;for (int i=0;i<m;++i) sum=(sum+f[0][i])%MOD;printf("%d\n",sum); }int main() {freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);Init();//for (int i=1;i<=m;++i) printf("%d ",a[i]);//printf("\n"); Solve();return 0; }
转载于:https://www.cnblogs.com/procedure2012/archive/2012/04/07/2435533.html
[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考试_(动态规划+kmp+矩阵乘法优化+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 ...
- bzoj 1009: [HNOI2008]GT考试(dp+kmp+矩阵快速幂)
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3932 Solved: 2398 [Submit][Sta ...
- [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)
Description 阿 申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学 A1A2...Am(0&l ...
- [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]
解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...
- 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]$表示分析到第 ...
- [HNOI2008]GT考试
题意 有一个长度为\(n\)\((n\le1e^9)\)只由阿拉伯数字组成的串\(A\),现在给一个长度为\(m\)\((m\le20)\)同样只由阿拉伯数字组成的串\(B\),求满足条件的\(A\) ...
- BZOJ[1009] [HNOI2008]GT考试
了了已久的心结 f[i][j]表示到第i为,长度为j的后缀与不吉利数字的前缀相同,其实这个和一些期望概率的DP类似,利用a数组记录当前j在加上不同的数字之后,可以分别转移至那些状态,用KMP处理一下, ...
最新文章
- Java基础学习总结(10)——static关键字
- Transient关键字的使用
- mysql数据库事件不执行_如何查看mysql事件是否执行
- html中的高和宽背景色怎么写,css background-size与背景图片填满div
- GAN生成对抗网络-GAN原理与基本实现-去噪与卷积自编码器01
- Mint-ui框架Index List 的应用,以及高度的适配问题
- js负数比较大小_【建阳童小|阅享数学(第十一期)】负数的由来
- oracle 查看白名单,oracle配置访问白名单教程
- python数据分析实例_Python数据分析及可视化实例之爬虫源码(05)
- 黑苹果EFI|联想 Lenovo ideapad 320S-15IKB 笔记本电脑实战黑苹果
- win10下使用mklink命令给C盘软件搬家
- [转载]郭云深先生解说形意拳经--九要论
- SWUST OJ954: 单链表的链接
- OpenCV总结6——stitcher
- 量化交易alpha、beta、shape等基本概念梳理
- mysql preparing状态_【Docker】在集群中部署应用为什么始终是Preparing状态
- 无机光致变色化合物-过渡金属氧化物WO3/MoO3/TiO2
- 丢手帕程序C语言,约瑟夫问题,即丢手帕游戏
- c语言设计篮球计分器软件,会玩篮球更会玩篮球赛计时计分器,完整设计资料开源...
- php json数据条数,PHP中的JSON数据
热门文章
- python统计excel中重复数据_EXCEL公式解读:统计不重复个数
- 谷歌浏览器安卓版_谷歌翻译(在线翻译)下载-谷歌翻译下载安装安卓版v5.12.0...
- C++知识点31——使用C++标准库(关联容器multimap及其初始化,赋值,查找,添加,删除与迭代器失效)
- 3.innodb内存结构
- 无法打开文件“python310_d.lib”
- HALCON双目三维重建实验
- 变量值为NAN的什么意思
- CloseHandle()函数的使用(转载)
- MySQL 优化实战记录
- 巧用Eclipse Java编辑器调试