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考试的更多相关文章

  1. [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)

    [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...

  2. BZOJ1009 [HNOI2008]GT考试 矩阵

    去博客园看该题解 题目 [bzoj1009][HNOI2008]GT考试 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2….Xn(0<=Xi<=9),他不希望准 ...

  3. bzoj1009 [HNOI2008] GT考试 矩阵乘法+dp+kmp

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4542  Solved: 2815[Submit][Statu ...

  4. [Bzoj1009][HNOI2008]GT考试(KMP)(矩乘优化DP)

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4309  Solved: 2640[Submit][Statu ...

  5. bzoj1009: [HNOI2008]GT考试(kmp+矩阵乘法)

    1009: [HNOI2008]GT考试 题目:传送门 题解: 看这第一眼是不是瞬间想起组合数学??? 没错...这样想你就GG了! 其实这是一道稍有隐藏的矩阵乘法,好题! 首先我们可以简化一下题意: ...

  6. [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)

    Description 阿 申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学 A1A2...Am(0&l ...

  7. [BZOJ1009] [HNOI2008] GT考试 (KMP & dp & 矩阵乘法)

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0< ...

  8. bzoj1009: [HNOI2008]GT考试 ac自动机+矩阵快速幂

    https://www.lydsy.com/JudgeOnline/problem.php?id=1009 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9 ...

  9. BZOJ1009:[HNOI2008]GT考试(AC自动机,矩乘DP)

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0< ...

随机推荐

  1. js左右滚动幻灯

    js左右滚动幻灯 点击下载

  2. div+css兼容 ie6_ie7_ie8_ie9_ie10和FireFox_Chrome等浏览器方法

    1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要换行   ...

  3. DEDECMS之三 首页、列表页怎么调用文章内容

    一.首页调用 百度了很多,没有找到实际的解决方法,对于直接读取数据库,这种写法不会采取. 后来,仔细考虑,这部分解决的内容不会很多,所以直接使用了简介的内容 方法一(默认长度55) [field:in ...

  4. codevs 1907 方格取数 3

    Description 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. Input 第 ...

  5. ASP.NET MVC的Web Api的实练

    学习ASP.NET MVC一年多来,现在该学学Web Api了.API与ASP.NET MVC的Controller差不多.前者只是返回数据序列化和发送给客户端: 后者返回View或Render Vi ...

  6. MVP 实例

    引言 可能有的朋友已经看过我翻译的Jean-Paul Boodhoo的 模型-视图-提供器 模式 一文了(如果没有,建议你先看下再看这篇文章,毕竟这两篇是紧密联系的).在那篇文章中,作者为了说明 MV ...

  7. codevs2806 红与黑

    难度等级:白银 codevs2806 红与黑 题目描述 Description 有一个矩形房间,覆盖正方形瓷砖.每块瓷砖涂成了红色或黑色.一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一, ...

  8. keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群

    本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...

  9. JSON返回DateTime/Date('123123123')/解决办法

    Date.prototype.format = function (format) //author: meizz    {        var o = {            "M+& ...

  10. ajax请求加载Loading或错误提示

    <div id="loadingDiv" style="color:#f39800;">Loading...</div> <scr ...