正题

题目链接:https://www.luogu.com.cn/problem/P3193


题目大意

求有多少个长度为nnn的字符串不包含子串sss。


解题思路

考虑dpdpdp,用fi,jf_{i,j}fi,j​表示第iii个已经匹配到jjj时的方案数。

显然这与正常匹配十分相似,我们分为两种情况

  1. ansi+1==sj+1ans_{i+1}==s_{j+1}ansi+1​==sj+1​那么转移到fi+1,j+1f_{i+1,j+1}fi+1,j+1​
  2. ansi+1!=sj+1ans_{i+1}!=s_{j+1}ansi+1​!=sj+1​,此时我们不能直接转移到fi+1,0f_{i+1,0}fi+1,0​,因为有可能sss的某段前缀和ansansans的这段后缀相等,考虑KMPKMPKMP。我们用KMPKMPKMP处理出nextnextnext数组,然后往前跳到一个匹配的位置kkk那么就可以转移到fi+1,k+1f_{i+1,k+1}fi+1,k+1​。

此时我们就有了一个O(nm2)O(nm^2)O(nm2)的做法,时间复杂度承担不下,我们可以发现每一次fff的转移方程都是相同的,所以我们用矩阵乘法优化就好了。

时间复杂度O(m3log⁡n)O(m^3\log n)O(m3logn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Size=25;
struct Matrix{int a[Size][Size];
}f;
int n,m,XJQ,ans,next[Size];
char s[Size];
Matrix operator*(Matrix &a,Matrix &b){Matrix c;memset(c.a,0,sizeof(c.a));for(int i=0;i<m;i++)for(int j=0;j<m;j++)for(int k=0;k<m;k++)(c.a[i][j]+=a.a[i][k]*b.a[k][j]%XJQ)%=XJQ;return c;
}
void KMP()
{next[0]=-1;next[1]=0;for(int i=2,j=0;i<=m;i++){while(j&&s[i]!=s[j+1]) j=next[j];j+=(s[i]==s[j+1]);next[i]=j;}return;
}
Matrix power(Matrix x,int b)
{Matrix ans=x;b--;while(b){if(b&1) ans=ans*x;x=x*x;b>>=1;}return ans;
}
int main()
{scanf("%d%d%d",&n,&m,&XJQ);scanf("%s",s+1);KMP();for(int i=0;i<=m;i++)for(int j=0;j<10;j++){int u=i;while(u&&(j+'0')!=s[u+1]) u=next[u];u+=(s[u+1]==(j+'0'));if(u==m) continue;f.a[i][u]++;}f=power(f,n);for(int i=0;i<m;i++)ans=(ans+f.a[0][i])%XJQ;printf("%d",ans);
}

P3193-[HNOI2008]GT考试【KMP,dp,矩阵乘法】相关推荐

  1. 【bzoj3329】Xorequ 数位dp+矩阵乘法

    题目描述 输入 第一行一个正整数,表示数据组数据 ,接下来T行 每行一个正整数N 输出 2*T行 第2*i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的解, 样例输入 1 1 ...

  2. bzoj 1009: [HNOI2008]GT考试(dp+kmp+矩阵快速幂)

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 3932  Solved: 2398 [Submit][Sta ...

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

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

  4. BZOJ 1009 GT考试 (AC自动机 + 矩阵乘法加速dp)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 准考证号为\(n\)位数\(X_1X_2....X_n(0<=X_ ...

  5. 【BZOJ 3326】[Scoi2013]数数 数位dp+矩阵乘法优化

    挺好的数位dp-- 先说一下我个人的做法: 经过观察,发现这题按照以往的思路从后往前递增,不怎么好推,然后我就大胆猜想,从前往后推,发现很好推啊,维护四个变量,从开始位置到现在有了i个数 f[i]:所 ...

  6. 51nod1836-战忽局的手段【期望dp,矩阵乘法】

    正题 题目连接:http://www.51nod.com/Challenge/Problem.html#problemId=1836 题目大意 nnn个点mmm次随机选择一个点标记(可以重复),求最后 ...

  7. P5004-专心OI - 跳房子【dp,矩阵乘法】

    正题 题目链接:https://www.luogu.org/problemnew/show/P5004 题目大意 把NNN个无色格子排成一行,可以把某些格子染成黑色,但两个黑色格子之间必须至少有MMM ...

  8. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路: 真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...

  9. P3193 [HNOI2008]GT考试

    传送门 容易看出是道DP 考虑一位一位填数字 设 f [ i ] [ j ] 表示填到第 i 位,在不吉利串上匹配到第 j 位时不出现不吉利数字的方案数 设 g [ i ] [ j ] 表示不吉利串匹 ...

最新文章

  1. 如何用计算机玩出花样,PPT图片玩出新花样
  2. What he did
  3. [郑重声明]木草山人编码的习惯
  4. 面试被问:Selenium元素定位不到问题,如何回答?
  5. 【Caffe代码解析】convert_imageset
  6. 规范 : disable account
  7. [转] 暴风影音被挂马 已有28000网民遭侵袭
  8. Excel的规划求解【详细步骤】
  9. 金融市场联动相关、风险测度、风险溢出 Copula、CoVaR、Garch、DCC、藤Vine、BEKK、SV、ECM
  10. 计算机报名照片 1寸,国考录用系统2021国家公务员考试报名照片尺寸是1寸还是2寸?...
  11. **任务一 WEB学习 笔记**
  12. mysql 隔离级别与锁
  13. 【数学建模入门】数学建模基本知识|如何准备如何备战
  14. tws蓝牙耳机哪个牌子好?2022蓝牙耳机排行榜
  15. 3d抽奖html,3d抽奖(微信)
  16. 朴树 vs. Lunar少女组,ET选的人你究竟爱谁?
  17. 网红KOL营销怎么做?如何寻找合适的网红KOL?
  18. Arcgis加载shp文件
  19. 为什么下载那种小电影时,经常会卡在99%?
  20. Camtasia Studio 2022中文录屏微课制作利器

热门文章

  1. c语言课程设计加密程序,C语言课程设计文件加密解密.doc
  2. python string length_如何使用python获取字符串长度?哪些方法?
  3. 高德面试官问我:JVM内存溢出后服务还能运行吗,我一顿操作行云流水
  4. 大神讲解Java for循环的几种用法
  5. 浙江省2021年英语高考成绩查询,浙江高考成绩查询、志愿填报时间公布!
  6. r.java没有生成_R.java 常见问题(R.java文件没有生成 )
  7. 计算机结构优化,计算机结构与程序优化.ppt
  8. 窗宽窗位改变图像_CT、MRI图像的影像诊断4大原则、5个步骤、3大阅片方法
  9. leetcode383. 赎金信(两种做法)
  10. 10-7 3-2-(b)查询由生产厂商B生产的所有产品的型号(model) 和价格(price) (10 分)