_bzoj1009 [HNOI2008]GT考试【矩阵加速dp】
2024-08-30 16:34:02
传送门: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;
}
最新文章
- Java 8新特性-2 接口定义增强
- Nginx Rewrite规则
- VS 2010 编译 Openssl
- 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
- .NET Core应用程序的2种部署方式
- Genesis 2.8-2.12
- c#读properties文件
- eclipse 添加jar包的方式
- web api 开发之 filter
- LR错误整理
- android 按钮Button单击背景切换
- ASP.NET Core Web API 最小化项目
- HDU4027 Can you answer these queries?(线段树 单点修改)
- cocos2d-x3.6 连连看完整源代码
- Codeforces Round #305 (Div. 2) B. Mike and Fun 暴力
- Windows 10 安装过程中,在自定义登录页面进入审核模式
- python3+selenium入门10-表单切换
- Python基础知识:列表
- hbase简单操作
- Ubuntu防火墙简单设置
热门文章
- Openwrt挂载NTFS硬盘提示“只读”错误的解决方法!
- Python中文GBK编码解决实例
- Centos java 安装
- mysql中“Table ‘’ is read only”的解决办法
- Cleave js 使用
- eclipse中导入其它的webproject遇到和解决的问题
- 我的package.json清单
- 手机阅读行业SWOT分析
- NHibernate查询导致Update问题
- Educational Codeforces Round 17 D. Maximum path DP