传送门

容易看出是道DP

考虑一位一位填数字

设 f [ i ] [ j ] 表示填到第 i 位,在不吉利串上匹配到第 j 位时不出现不吉利数字的方案数

设 g [ i ] [ j ] 表示不吉利串匹配到第 i 位,再添加一个数字,使串匹配到第 j 位的方案数

那么方程显然为 :

注意我们不需要考虑 $j=m$ 的情况,因为 $j=m$时肯定已经出现匹配了

显然我们可以预处理出 g ,然后直接转移

最后答案就是

还有一个问题,n 太大了

发现 g 是固定的,把 g 搞成矩阵直接矩阵加速一下

复杂度$ O(log_n)$

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
inline int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }return x*f;
}
const int N=27;
int n,m,mo;
inline int fk(int x) { return x>=mo ? x-mo : x; }
int a[N],fail[N];
char s[N];
int g[N][N];
struct matrix//矩阵不解释
{int a[N][N];matrix () { memset(a,0,sizeof(a)); }inline matrix operator * (const matrix &tmp) const {matrix res;for(int i=0;i<m;i++)for(int j=0;j<m;j++)for(int k=0;k<m;k++)res.a[i][j]=fk(res.a[i][j]+a[i][k]*tmp.a[k][j]%mo);return res;}
}F,M;
inline matrix ksm(matrix x,int y)//矩阵快速幂不解释
{matrix res;for(int i=0;i<=m;i++) res.a[i][i]=1;while(y){if(y&1) res=res*x;x=x*x; y>>=1;}return res;
}
inline void pre()//预处理,本人闲的蛋疼用kmp预处理g
{int x=0; fail[0]=-1;for(int i=1;i<=m;i++){x=fail[i-1]; while(x!=-1&&a[x+1]!=a[i]) x=fail[x];fail[i]=x+1;}fail[0]=0;for(int i=0;i<m;i++)for(int j=0;j<10;j++)//枚举填的每个数字,看看能匹配到哪里
        {x=i; while(x&&a[x+1]!=j) x=fail[x];g[i][a[x+1]==j ? x+1 : x]++;//把匹配到的位置++
        }for(int i=0;i<m;i++) for(int j=0;j<m;j++) M.a[i][j]=g[i][j];//转移矩阵就是g
}
int main()
{n=read(); m=read(); mo=read();scanf("%s",s+1);for(int i=1;i<=m;i++) a[i]=s[i]-'0'; a[m+1]=a[0]=-1;//闲的蛋疼,就是爱转数字pre(); F.a[0][0]=1;//初始状态F=F*ksm(M,n); int ans=0;for(int i=0;i<m;i++) ans=fk(ans+F.a[0][i]);printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/LLTYYC/p/9907548.html

P3193 [HNOI2008]GT考试相关推荐

  1. BZOJ 1009 [HNOI2008]GT考试

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

  2. BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 ...

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

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

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

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

  5. [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]

    解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...

  6. [HNOI2008 GT考试]

    [关键字]:动态规划 矩阵乘法 [题目大意]:给定一个字符集为(0-9)的字符串T(length<=20),求长度为N的不包含T的字符串的总数. //====================== ...

  7. BZOJ 1009:[HNOI2008]GT考试

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1009 大意:给一个长度不大于20的数字串,求长度为N(10^9)的所有数字串中不包含该串 ...

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

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

  9. [HNOI2008]GT考试

    题意 有一个长度为\(n\)\((n\le1e^9)\)只由阿拉伯数字组成的串\(A\),现在给一个长度为\(m\)\((m\le20)\)同样只由阿拉伯数字组成的串\(B\),求满足条件的\(A\) ...

最新文章

  1. Spring Cloud Alibaba基础教程:Nacos的集群部署
  2. an unsupported operation was attempted问题解决
  3. SAP Freestyle UI5 和 SAP Fiori Elements 应用的区别
  4. python发动机曲轴连杆动力学计算
  5. signature=127e8fab504590e43c26b869ab8a8d06,一种Ⅱ型集中器下电表全无数据故障的现场消缺方法...
  6. OSPF OVER FR HUB-SPPKE
  7. java修改cookie的值_Java管理Cookie增删改查操作。
  8. 嘉腾发布“守护者I”抗疫机器人
  9. 基于机器学习的“能源之星”得分预测的完整演练
  10. 支持亿级标签接入,ClickHouse在广域物联网云平台架构的探索与实践
  11. Linux 查看服务器cpu信息常用命令大全
  12. Intel寄存器名称解释及用途,%eax%ebx等都是什么意思
  13. html页面打印插件,分享8款网站开发中最好用的打印页面插件
  14. Windows 浏览器调起客户端应用程序
  15. 中国大学MOOC课程《程序设计入门——C语言》 第8周编程练习
  16. 一直无法进入BIOS
  17. 【SSR和CSR】服务端渲染和客户端渲染区别?如何快速分辨页面是SSR还是CSR?
  18. 罗彻斯特大学计算机科学系专业排名,2019上海软科世界一流学科排名计算机科学与工程专业排名罗切斯特大学排名第201-300...
  19. 实操手册:如何在GKE上部署HTTP(S) Load Balancer及容器应用程式
  20. 2022.01.26翻译Watermelon

热门文章

  1. 【Python学习】 - plt画图时,添加标题的中英文问题
  2. 【HDU - 5883】The Best Path(判断欧拉回路)
  3. 【POJ - 3342】Party at Hali-Bula(树形dp,最大独立集,是否有唯一解)
  4. 算法笔记 -- 离散化
  5. ACM - 欧拉函数(内容)
  6. 3.深度学习练习:Planar data classification with one hidden layer
  7. 11.Pipelines
  8. 计算机原理期中考试,计算机组成原理期中考试试题
  9. 计算机技术员好学吗,电脑技术员,沦落到如此地步...
  10. 递归计算从1到100之间的所有数之和。