传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1009

比较不错的一道题,令f(i, j)表示考号匹配到i位,后j位为不吉利串的前j位,那么对于每一个状态,都是上一个状态的线性组合,所以可以用矩阵来加速。

#include <cstdio>
#include <cstring> const int maxn = 1000000005, maxm = 25; int n, m, p, mtx[maxm][maxm], trie[maxm][10], fail[maxm], trans[maxm][maxm], tem[maxm][maxm], ans;
char unf[maxm]; inline void mul(int aa[maxm][maxm], int ss[maxm][maxm]) {
memset((void*)tem, 0, sizeof tem);
for (int i = 0; i < m; ++i) {
for (int j = 0; j < m; ++j) {
for (int k = 0; k < m; ++k) {
tem[i][j] = (tem[i][j] + aa[i][k] * ss[k][j]) % p;
}
}
}
memcpy((void*)aa, (void*)tem, sizeof tem);
}
inline void poww(int mi) {
int i;
for (i = 31; mi >> i & 1 ^ 1; --i);
memcpy((void*)trans, (void*)mtx, sizeof mtx);
for (--i; ~i; --i) {
mul(trans, trans);
if (mi >> i & 1) {
mul(trans, mtx);
}
}
} int main(void) {
//freopen("in.txt", "r", stdin);
scanf("%d%d%d", &n, &m, &p);
scanf("%s", unf + 1);
for (int i = 0; i < m; ++i) {
trie[i][unf[i + 1] - '0'] = i + 1;
}
for (int i = 1; i <= m; ++i) {
for (int j = 0; j < 10; ++j) {
if (trie[i][j]) {
fail[trie[i][j]] = trie[fail[i]][j];
}
else {
trie[i][j] = trie[fail[i]][j];
}
}
}
for (int i = 0; i < m; ++i) {
for (int j = 0; j < 10; ++j) {
++mtx[i][trie[i][j]];
}
} poww(n);
for (int i = 0; i < m; ++i) {
ans = (ans + trans[0][i]) % p;
}
printf("%d\n", ans);
return 0;
}

  

最新文章

  1. Java 8新特性-2 接口定义增强
  2. Nginx Rewrite规则
  3. VS 2010 编译 Openssl
  4. 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
  5. .NET Core应用程序的2种部署方式
  6. Genesis 2.8-2.12
  7. c#读properties文件
  8. eclipse 添加jar包的方式
  9. web api 开发之 filter
  10. LR错误整理
  11. android 按钮Button单击背景切换
  12. ASP.NET Core Web API 最小化项目
  13. HDU4027 Can you answer these queries?(线段树 单点修改)
  14. cocos2d-x3.6 连连看完整源代码
  15. Codeforces Round #305 (Div. 2) B. Mike and Fun 暴力
  16. Windows 10 安装过程中,在自定义登录页面进入审核模式
  17. python3+selenium入门10-表单切换
  18. Python基础知识:列表
  19. hbase简单操作
  20. Ubuntu防火墙简单设置

热门文章

  1. Openwrt挂载NTFS硬盘提示“只读”错误的解决方法!
  2. Python中文GBK编码解决实例
  3. Centos java 安装
  4. mysql中“Table ‘’ is read only”的解决办法
  5. Cleave js 使用
  6. eclipse中导入其它的webproject遇到和解决的问题
  7. 我的package.json清单
  8. 手机阅读行业SWOT分析
  9. NHibernate查询导致Update问题
  10. Educational Codeforces Round 17 D. Maximum path DP