题目链接

\(f[i][j]\)表示准考证号到第\(i\)位,不吉利数字匹配到第\(j\)位的方案数。

答案显然是\(\sum_{i=0}^{m-1}f[n][i]\)

\(f[i][j]=\sum_{k=1}^{m-1}f[i-1][k]*g[k][j]\)

\(g[i][j]\)表示不吉利数字匹配到第\(i\)位后加一个数字能匹配到第\(j\)位的方案数,因为这个数字是固定的,可以通过\(kmp\)求出来。

然后观察到\(f[i][j]\)的递推式是个矩阵,用矩阵快速幂加速即可。

#include <cstdio>
#include <cstring>
const int MAXM = 22;
char a[MAXM];
int nxt[MAXM], g[MAXM][MAXM], f[MAXM], tmp[MAXM][MAXM], temp[MAXM];
int n, m, mod, ans;
void gg(){
for(int i = 1; i <= m; ++i)
for(int j = 1; j <= m; ++j){
tmp[i][j] = 0;
for(int k = 1; k <= m; ++k)
(tmp[i][j] += g[i][k] * g[k][j]) %= mod;
}
for(int i = 1; i <= m; ++i)
for(int j = 1; j <= m; ++j)
g[i][j] = tmp[i][j];
}
void gf(){
for(int i = 1; i <= m; ++i){
temp[i] = 0;
for(int j = 1; j <= m; ++j)
(temp[i] += f[j] * g[j][i]) %= mod;
}
for(int i = 1; i <= m; ++i) f[i] = temp[i];
}
void fast_pow(int k){
while(k){
if(k & 1) gf();
gg(); k >>= 1;
}
}
int main(){
scanf("%d%d%d%s", &n, &m, &mod, a + 1);
int p = 0;
for(int i = 2; i <= m; ++i){
while(a[i] != a[p + 1] && p) p = nxt[p];
if(a[i] == a[p + 1]) ++p;
nxt[i] = p;
}
for(int i = 0; i < m; ++i)
for(int j = '0'; j <= '9'; ++j){
int tmp = i;
while(a[tmp + 1] != j && tmp) tmp = nxt[tmp];
if(a[tmp + 1] == j) ++tmp;
if(tmp < m) ++g[i + 1][tmp + 1];
}
f[1] = 1;
fast_pow(n);
for(int i = 0; i <= m; ++i)
(ans += f[i]) %= mod;
printf("%d\n", ans);
return 0;
}

【洛谷 P3193】 [HNOI2008]GT考试(KMP,dp,矩阵乘法)的更多相关文章

  1. 洛谷P3193 [HNOI2008]GT考试 kmp+dp

    正解:kmp+dp+矩阵优化 解题报告: 传送门! 啊刚说想做矩阵优化dp的字符串题就找到辣QwQ虽然不是AC自动机的但都差不多嘛QwQ 首先显然可以想到一个dp式?就f[i][j]:凑出i位了,在s ...

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

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

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

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

  4. 洛谷P3193 [HNOI2008]GT考试(KMP,矩阵)

    传送门 大佬讲的真吼->这里 首先考虑dp,设$f[i][j]$表示长串匹配到第$i$位,短串最多匹配到$j$位时的方案数 那么答案就是$\sum_{i=0}^{m-1}f[n][i]$ 然后考 ...

  5. 【BZOJ】1009: [HNOI2008]GT考试(dp+矩阵乘法+kmp+神题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1009 好神的题orzzzzzzzzzz 首先我是连递推方程都想不出的人...一直想用组合来搞..看来 ...

  6. 【BZOJ-1009】GT考试 KMP+DP+矩阵乘法+快速幂

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

  7. BZOJ 1009 HNOI2008 GT考试 KMP算法+矩阵乘法

    标题效果:给定的长度m数字字符串s.求不包括子s长度n数字串的数目 n<=10^9 看这个O(n)它与 我们不认为这 令f[i][j]长度i号码的最后的字符串j位和s前者j数字匹配方案 例如,当 ...

  8. 【KMP】【矩阵加速】【递推】洛谷 P3193 [HNOI2008]GT考试 题解

        看出来矩阵加速也没看出来KMP…… 题目描述 阿申准备报名参加 GT 考试,准考证号为\(N\)位数\(X_1,X_2…X_n(0\le X_i\le9)\),他不希望准考证号上出现不吉利的数 ...

  9. 洛谷P3193 [HNOI2008]GT考试(dp 矩阵乘法)

    题意 题目链接 Sol 设\(f[i][j]\)表示枚举到位置串的第i位,当前与未知串的第j位匹配,那么我们只要保证在转移的时候永远不会匹配即可 预处理出已知串的每个位置加上某个字符后能转移到的位置, ...

  10. BZOJ.1009.[HNOI2008]GT考试(KMP DP 矩阵快速幂)

    题目链接 设f[i][j]为当前是第i位考号.现在匹配到第j位(已有j-1位和A[]匹配)的方案数 因为假如当前匹配j位,如果选择的下一位与A[j+1]不同,那么新的匹配位数是fail[j]而不是0, ...

随机推荐

  1. Healthcare in Azure

  2. 【转】Android ROM分析(1):刷机原理及方法

    一.刷机原理 android系统启动的时候,首先会进行一些诸如硬件自检之类的操作,这些操作完成以后(至少它应该知道当前的机器有没有电),会检查一下当前手机按键的状态(接下来就是所谓刷机模式切换了,不同 ...

  3. 【转】使用AllureReport生成测试报告

    Allure简介 Allure是一个report框架,可以基于一些测试框架生成测试报告,比较常用的一般是Junit/Testng框架:Allure 生成的报告样式简洁美观,同时又支持中文:Allure ...

  4. Software Engineering Continuous Integration Eclipse Mylyn

  5. python 代码性能分析 库

    问题描述 1.Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢: 2.Python开发的程序在使用过程中占用内存很大,想确定下是哪段代码引起的: 解决方案 使用profile分析分析c ...

  6. JS高级:面向对象解析

    1 实例属性/方法 都是绑定在使用构造函数创建出来的对象p上; 最终使用的时候也是使用对象p来进行访问; function Person(name, age, doFunc) { this.name ...

  7. ISO/IEC 9899:2011 条款6.10.1——条件包含

    6.10.1 条件包含 约束 1.控制条件包含的表达式应该是一个整数常量表达式,除了:标识符(包括那些词法上与关键字相同的)被解析为以下所描述的:[注:因为控制常量表达式在翻译阶段4期间被计算,所以所 ...

  8. Java12新特性 -- JVM 常量 API

    Java 12 中引入 JVM 常量 API,用来更容易地对关键类文件 (key class-file) 和运行时构件(artefact)的名义描述 (nominal description) 进行建 ...

  9. Shell流程控制语句for

    for语法格式: for 变量 in 参数列表 do 命令 done 或者 for 变量 in 参数列表 ; do 命令 done for语句流程控制图: 实例: [root@youxi1 ~]# v ...

  10. html网页调用本地exe程序的实现方法(转)

    https://blog.csdn.net/ilovecr7/article/details/46803711 最近在做一个项目,要什么网页里调exe...开始以为不能实现,后来想想很多就跟淘宝网页上 ...