[bzoj1009][HNOI2008]GT考试
Description
阿申准备报名参加考试,准考证号为
位数
,他不希望准考证号上出现不吉利的数字。
他的不吉利数学有
位,不出现是指
中没有恰好一段等于
.
可以为
.
Input
第一行输入.接下来一行输入
位的数。
Output
阿申想知道不出现不吉利数字的号码有多少种,输出模取余的结果.
Sample Input
4 3 100
111
Sample Output
81
HINT
Solution
表示已填好前i位,此时匹配到
的方案数.
表示现在匹配到
,填下一个数后匹配到
的方案数.
.
可用
预处理出.
,矩乘优化即可.


#include<set>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define M 25
using namespace std;
struct matrix{
int a[M][M],n,m;
}a,b;
int g[M][M],nxt[M],n,m,k,ans;
char c[M];
inline void get_next(){
for(int i=2,j=0;i<=m;++i){
while(j&&c[i]!=c[j+1]) j=nxt[j];
j+=(c[i]==c[j+1]);
nxt[i]=j;
}
b.n=b.m=m;
for(int i=0,l;i<m;++i){
for(char j='0';j<='9';++j){
l=i;
while(l&&c[l+1]!=j) l=nxt[l];
if(c[l+1]==j) ++b.a[i][l+1];
else ++b.a[i][0];
}
}
for(int i=0;i<b.n;++i)
for(int j=0;j<b.m;++j)
b.a[i][j]%=k;
}
inline matrix mul(matrix a,matrix b){
matrix c;
c.n=a.n;c.m=b.m;
for(int i=0;i<c.n;++i)
for(int j=0;j<c.m;++j){
c.a[i][j]=0;
for(int l=0;l<c.n;++l){
c.a[i][j]=(c.a[i][j]+a.a[i][l]*b.a[l][j]%k)%k;
if(b.m==1) printf("(%d,%d)=(%d,%d)*(%d,%d)\n",i,j,i,l,l,j);
}
}
return c;
}
inline matrix po(matrix a,int x){
matrix c;
c.n=a.n;c.m=a.m;
for(int i=0;i<c.n;++i)
for(int j=0;j<c.m;++j)
if(i!=j) c.a[i][j]=0;
else c.a[i][j]=1;
while(x){
if(x&1){
c=mul(c,a);
}
a=mul(a,a);x>>=1;
}
return c;
}
inline void init(){
scanf("%d%d%d%s",&n,&m,&k,c+1);
if(!m){
ans=1;
for(int i=1;i<=n;++i)
ans=ans*10%k;
printf("%d\n",ans);return;
}
get_next();
a.n=1;a.m=m;
a.a[0][0]=1;
a=mul(a,po(b,n));
for(int i=0;i<a.m;++i)
ans=(ans+a.a[0][i])%k;
printf("%d\n",ans);
}
int main(){
freopen("exam.in","r",stdin);
freopen("exam.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return 0;
}
[bzoj1009][HNOI2008]GT考试的更多相关文章
- [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)
[BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...
- BZOJ1009 [HNOI2008]GT考试 矩阵
去博客园看该题解 题目 [bzoj1009][HNOI2008]GT考试 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2….Xn(0<=Xi<=9),他不希望准 ...
- bzoj1009 [HNOI2008] GT考试 矩阵乘法+dp+kmp
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4542 Solved: 2815[Submit][Statu ...
- [Bzoj1009][HNOI2008]GT考试(KMP)(矩乘优化DP)
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4309 Solved: 2640[Submit][Statu ...
- bzoj1009: [HNOI2008]GT考试(kmp+矩阵乘法)
1009: [HNOI2008]GT考试 题目:传送门 题解: 看这第一眼是不是瞬间想起组合数学??? 没错...这样想你就GG了! 其实这是一道稍有隐藏的矩阵乘法,好题! 首先我们可以简化一下题意: ...
- [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)
Description 阿 申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学 A1A2...Am(0&l ...
- [BZOJ1009] [HNOI2008] GT考试 (KMP & dp & 矩阵乘法)
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0< ...
- bzoj1009: [HNOI2008]GT考试 ac自动机+矩阵快速幂
https://www.lydsy.com/JudgeOnline/problem.php?id=1009 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9 ...
- BZOJ1009:[HNOI2008]GT考试(AC自动机,矩乘DP)
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0< ...
随机推荐
- 改变input默认选中颜色
修改 outline-color 属性即可实现
- sg函数与博弈论2
参考链接: http://blog.sina.com.cn/s/blog_51cea4040100h3l9.html 这篇主要就是讲anti-sg.multi-sg和every-sg的. 例1 poj ...
- swift UIImage加载远程图片和圆角矩形
UIImage这个对象是swift中的图像类,可以使用UIImageView加载显示到View上. 以下是UIImage的构造函数: init(named name: String!) -> U ...
- WP老杨解迷:发布包多少大小合适
有位做安卓的老兄这样描述发布包大小问题:发布包和女人一样,新包如年轻女子,不能太瘦,太瘦没有货,所以大家都喜欢身段窈窕的少女,正火的产品如中年妇女,要得是风韵魅力,胖瘦已经不那么重要,但是也不能太胖, ...
- codevs2010 求后序遍历
难度等级:白银 2010 求后序遍历 题目描述 Description 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列. 输入描述 Input Description 共两行,第一行一个字符串 ...
- mac里git项目删除.DS_Store文件
用mac开发项目,每次提交文件时都生成修改文件的.DS_Store文件,提交时会不会觉得比较烦?别急,下面给出解决方案.我们需要用到.gitignore文件去配置Git目录中需要忽略的文件. .git ...
- LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
LeetCode:Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth ...
- 通向高可扩展性之路(WhatsApp篇)---- 脸书花了190亿买来的WhatsApp的架构
原文链接:http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-bill ...
- exgcd,求乘法逆元
procedure exgcd(a,b:int64); var t:longint; begin then begin x:=;y:=; exit; end else exgcd(b,a mod b) ...
- C# WinForm捕获全局异常
网上找的C# WinForm全局异常捕获方法,代码如下: static class Program { /// <summary> /// 应用程序的主入口点. /// </summ ...