传送门1
传送门2
写在前面:卡了我一下午的题目,讨厌矩阵乘法!
思路:
一开始觉得是kmp+容斥,想用累似数位DP的方法做,但发现讨论的东西有点麻烦,而且这样做是线性O(n)O(n)且貌似不能优化,然后就胡思乱想搞了个DP,但发现没有考虑重复情况,还是不行。
后来,当我看到题解有矩乘的时候,我有一丝弃疗的想法
a[i][j]指已经匹配不吉利串的前j个元素到匹配前i个元素的方案数(这里i,j指的是长度,不是下标),求这个的初始值可以用kmp随便搞搞,之后就可以矩阵快速幂走起,最后我们想要的答案就是由匹配0位到匹配i位的所有方案数(0<=i<m),即∑m−1i=0a[i][0]∑^{m-1}_{i=0}a[i][0]
初始矩阵ans为
ans[i][i]=1(0<=i<m)ans[i][i]=1(0
注意:考虑到大家kmp的写法各不同,所以控制数组下标时要注意!
代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,mod;
int next[23];
char s[23];
struct matrix
{int map[23][23];void clear(){memset(map,0,sizeof(map));}
}a,ans;
matrix mul(matrix x,matrix y)
{matrix z;z.clear();for (int i=0;i<m;i++)for (int j=0;j<m;j++)for (int k=0;k<m;k++)z.map[i][j]=(z.map[i][j]+x.map[i][k]*y.map[k][j]%mod)%mod;return z;
}
main()
{scanf("%d%d%d",&n,&m,&mod);scanf("%s",s);for (int i=1;i<m;i++){int tmp=next[i];while (tmp&&s[tmp]!=s[i]) tmp=next[tmp];next[i+1]=tmp+(s[i]==s[tmp]);}for (int i=0;i<m;i++)for (int j='0';j<='9';j++){int tmp=i;while (tmp&&s[tmp]!=j) tmp=next[tmp];if (s[tmp]==j) a.map[tmp+1][i]++;else a.map[0][i]++;}for (int i=0;i<m;i++) ans.map[i][i]=1;while (n){if (n&1) ans=mul(a,ans);n>>=1;a=mul(a,a);}int tot=0;for (int i=0;i<m;i++) tot=(tot+ans.map[i][0])%mod;printf("%d",tot%mod);
}

【BZOJ1009】【codevs2325】GT考试,kmp+矩阵加速DP相关推荐

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

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

  2. 【codevs2304】【BZOJ1875】HH去散步,第一次的矩阵加速DP

    传送门1 传送门2 写在前面:今天冒傻气 思路:我第一眼没有看出来它是个矩阵乘法加速DP,只觉得如果这个t小点就直接广搜可以了,后来发现网上的题解无一例外都是矩阵快速幂的时候,我的表情 后来看了看黄学 ...

  3. 线性代数二之矩阵加速DP——数学作业,Arc of Dream

    矩阵加速 数学作业 description solution code Arc of Dream description solution code 数学作业 description solution ...

  4. [ZJOI2011]细胞——斐波那契数列+矩阵加速+dp

    Description bzoj2323 Solution 题目看起来非常复杂. 本质不同的细胞这个条件显然太啰嗦, 是否有些可以挖掘的性质? 1.发现,只要第一次分裂不同,那么互相之间一定是不同的( ...

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

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

  6. 线性代数四之动态DP(广义矩阵加速)——Can you answer these queries III,保卫王国

    动态DP--广义矩阵加速 SP1716 GSS3 - Can you answer these queries III description solution code [NOIP2018 提高组] ...

  7. [CQOI2018] 交错序列(矩阵加速优化dp)

    problem luogu-P4456 solution 预处理阶乘和阶乘的逆元,枚举 111 出现次数 iii,∑(n−i+1i)(n−i)aib\sum\binom{n-i+1}{i}(n-i)^ ...

  8. 线性代数三之状压DP的矩阵加速——Quad Tiling,Bus公交线路

    状压与矩阵加速的藕断丝连 Quad Tiling description solution code [Hnoi2010]Bus 公交线路 description solution code Quad ...

  9. 矩阵快速幂(矩阵加速)

    //南昌理工ACM集训队 放心食用 矩阵加速 快速幂(前置技能) 矩阵快速幂 可乐 附个模板 最后小结 本人小白如有不对欢迎指正ლ(╹◡╹ლ) 矩阵加速 快速幂(前置技能) 对于普通的求a的b次方,一 ...

最新文章

  1. 对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
  2. fzu - 2164 Jason's problem
  3. SUID SGID LINUX 权限安全设置
  4. Django(part12)--模板的标签
  5. 第九次作业——测试报告和用户手册
  6. [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作
  7. 协同过滤推荐算法-----向量之间的相似度
  8. 基于NumPy实现随机梯度下降算法
  9. 三菱modbusRTU通讯实例_施耐德PLC常见的两种编程通讯控制实例
  10. 《算法》-1.5-并查集算法
  11. Access2016学习6
  12. matlab双峰滤波,MATLAB中的单峰或双峰分布
  13. CentOS系统编译部署nginx-http-flv-module模块搭建流媒体服务器
  14. 从HotSpot源码,深度解读 park 和 unpark |原创
  15. netts之 CTWSocket代码流程分析(整体是客户端请求式的)
  16. 城堡、游乐园、地下城!!!500+ 超棒 FBX 模型素材,全部都免费!
  17. Sentinel-2(哨兵2号)SNAP预处理
  18. 打开任务管理器的方法
  19. python划分有限元网格_有限元网格划分心得
  20. Mysql5 实现交叉表查询

热门文章

  1. Linux入侵痕迹检测方案【华为云技术分享】
  2. 【华为云技术分享】#华为云·寻找黑马程序员#海量数据的分页怎么破?
  3. js中如何在不影响既有事件监听的前提下新增监听器
  4. 社交网络图中结点的“重要性”计算
  5. Kotlin学习笔记 第二章 类与对象 第五节 可见性 第六节 扩展
  6. 【SpringBoot基础知识】如何在springboot中使用多线程
  7. Sublime Text 2安装插件的方法
  8. lnmp mysql 远程访问_LNMP环境下 远程连接mysql数据库
  9. python指数运算函数_分享Python中用于计算指数的exp()方法实例教程
  10. php如何根据ip查找地址,根据IP地址查找IP所在地