1009: [HNOI2008]GT考试
1009: [HNOI2008]GT考试
Time Limit: 1 Sec Memory Limit: 162 MB
Description
阿申准备报名参加GT考试,准考证号为N位数\(X_1X_2....X_n(0 \le X_i \le 9)\),他不希望准考证号上出现不吉利的数字.
他的不吉利数学\(A_1A_2...A_m(0 \le A_i \le 9)\)有M位,不出现是指\(X_1X_2...X_n\)中没有恰好一段等于\(A_1A_2...A_m\).\(A_1\)和\(X_1\)可以为\(0\)
Input
第一行输入N,M,K.接下来一行输入M位的数.\(N \le 10^9, M \le 20,K \le 1000\)
Output
阿申想知道不出现不吉利数字的号码有多少种,输出模K取余的结果.
Sample Input
4 3 100
111
Sample Output
81
解法
此题其实有点像poj2778,不过此题其实简单一些。
可以先用KMP求出可以从哪些状态转移一步到哪些状态。
之后就是一道矩阵的经典题目,求出n步的方案数。
#include <cstdio>
int n,m,mod,a[25][25],b[25][25],c[25][25],nxt[25];
char s[25];
inline void mul(int x[25][25],int y[25][25]) {
int i,j,k;
for(i=0;i<m;++i)
for(j=0;j<m;++j) {
c[i][j]=0;
for(k=0;k<m;++k)
c[i][j]=(c[i][j]+x[i][k]*y[k][j])%mod;
}
for(i=0;i<m;++i)
for(j=0;j<m;++j)
x[i][j]=c[i][j];
}
int main() {
int i,j=0,t;
for(scanf("%d%d%d%s",&n,&m,&mod,s+1),i=2;i<=m;++i) {
while(j&&s[j+1]!=s[i])j=nxt[j];
nxt[i]=((s[j+1]==s[i])?(++j):(j));
}
for(i=0;i<m;++i)
for(j=0;j<10;++j) {
for(t=i;t&&s[t+1]!=j+'0';t=nxt[t]);
if(((s[t+1]==j+'0')?++t:t)^m) (++b[t][i]<mod)?1:b[t][i]=0;
}
for(i=0;i<m;++i) a[i][i]=1;
while(n) {
if(n&1) mul(a,b);
mul(b,b);
n>>=1;
}
int ans=0;
for(i=0;i<m;++i) (ans+=a[i][0])<mod?1:ans-=mod;
printf("%d\n",ans);
return 0;
}
Ps:其实hdu2243和poj2778与此题都相似,不过它们是在Tire树上建立矩阵。
1009: [HNOI2008]GT考试的更多相关文章
- BZOJ 1009: [HNOI2008]GT考试( dp + 矩阵快速幂 + kmp )
写了一个早上...就因为把长度为m的也算进去了... dp(i, j)表示准考证号前i个字符匹配了不吉利数字前j个的方案数. kmp预处理, 然后对于j进行枚举, 对数字0~9也枚举算出f(i, j) ...
- BZOJ 1009 [HNOI2008]GT考试 (KMP + 矩阵快速幂)
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4266 Solved: 2616[Submit][Statu ...
- bzoj 1009: [HNOI2008]GT考试 -- KMP+矩阵
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数X1X2.. ...
- 【BZOJ】1009: [HNOI2008]GT考试(dp+矩阵乘法+kmp+神题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 好神的题orzzzzzzzzzz 首先我是连递推方程都想不出的人...一直想用组合来搞..看来 ...
- bzoj 1009 [HNOI2008]GT考试(DP+KMP+矩阵乘法)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1009 [题意] 给定一个字符串T,问长度为n且不包含串T的字符串有多少种. [思路] ...
- [BZOJ 1009] [HNOI2008] GT考试 【AC自动机 + 矩阵乘法优化DP】
题目链接:BZOJ - 1009 题目分析 题目要求求出不包含给定字符串的长度为 n 的字符串的数量. 既然这样,应该就是 KMP + DP ,用 f[i][j] 表示长度为 i ,匹配到模式串第 j ...
- BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路:真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...
- bzoj 1009 [HNOI2008]GT考试——kmp+矩阵优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 首先想到 确保模式串不出现 就是 确保每个位置的后缀不是该模式串. 为了dp,需要记录 ...
- 题解:BZOJ 1009 HNOI2008 GT考试 KMP + 矩阵
原题描述: 阿申准备报名参加GT考试,准考证号为N位数 X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0<=Ai&a ...
随机推荐
- 一步步实现ABAP后台导入EXCEL到数据库【2】
前文:http://www.cnblogs.com/hhelibeb/p/5912330.html 既然后台作业只能在应用服务器运行,那么,我们可以先将要上传的数据保存在应用服务器中,之后再以后台作业 ...
- 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
一.[前言] (1)本文将用到IOC框架Unity,可参照<Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备>(2)本文的解决方案是基于前述<使用I ...
- MYSQL离线安装
由于MySQL的广泛应用,MySQL的安装也就成了大家经常会碰到的问题.并且由于不是所有机器都可连接外网,所以MySQL的离线安装显得比较重要.而本文旨在介绍CentOS6.6下离线安装MySQL. ...
- MySQL可视化软件Work Bench导出导入数据库
首先打开你的work bench,输入你的密码进入主页面 A:导入数据库 在Schemas空白处右键选择Create~:建立一个数据库,然后就可以导入你的sql文件了 File-->Open S ...
- [Erlang 0115] 2014值得期待的Erlang两本新书
在2014年的开头就有这样一个令人振奋的好消息,Erlang有一本新书即将出版 <The Erlang Runtime System>,其作者happi在2013年3月份公布了这本书的写作 ...
- MySQL 索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...
- kvm常用操作
安装一些虚拟化的组件 yum -y install kvm python-virtinst libvirt bridge-utils virt-manager qemu-kvm-tools virt- ...
- RHEL6.3系统安装
进入安装界面 这里选择跳过 点击下一步 选择安装语言 选择键盘 选择系统储存方式 选择是否格式化储存设备 给安装的系统一个计算机名 选择时区 给ro ...
- Java Generics and Collections-2.4-2.5
2.4 The Get and Put Principle Get and Put Principle: 用于取对象的泛型集合,声明为 <? extends T> 用于存对象的泛型集合,声 ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...