LGOJP3193 [HNOI2008]GT考试
\(f[i][j]\)表示当前摆放到第\(i\)位,然后当前的匹配长度为\(j\)
- \(f[i][j]=\sum {f[i][k]*g[k][j]}\)
\(g[i][j]\)表示将长度为\(i\)的匹配变成长度为\(j\)的匹配的方案数。这个可以kmp预处理出来:枚举当前已匹配长度\(i\)和当前要放的下一个字符,跳一下\(nxt\)看能匹配的长度,每次对\(g[i][j]+1\)即可。这样是\(O(10\times m^2)\)
然后这个式子矩阵快速幂优化一下即可。
总复杂度是\(O(10\times m^2+m^3\log n)\)
/*
$f[i][j]$表示当前摆放到第$i$位,然后当前的匹配长度为$j$
* $f[i][j]=\sum {f[i][k]*g[k][j]}$
$g[i][j]$表示加一个字符将长度为$i$的匹配变成长度为$j$的匹配的方案数。这个可以kmp预处理出来。
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 25;
inline void read(int &x) {
x = 0; int f = 1; char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
x *= f;
}
int n, m, mod, nxt[N];
char a[N];
struct mat {
int c[21][21];
mat() {memset(c, 0, sizeof(c));}
mat operator * (mat &x) {
mat ans;
for(int i = 0; i < m; ++i)
for(int j = 0; j < m; ++j)
for(int k = 0; k < m; ++k)
(ans.c[i][j] += c[i][k] * x.c[k][j] % mod) %= mod;
return ans;
}
}A;
int main() {
#ifndef ONLINE_JUDGE
freopen("data.in","r",stdin);
#endif
read(n); read(m); read(mod);
scanf("%s", a + 1);
memset(nxt, 0, sizeof(nxt));
for(int i = 2, j = 0; i <= m; ++i) {
while(j && a[j + 1] != a[i]) j = nxt[j];
if(a[j + 1] == a[i]) ++j;
nxt[i] = j;
}
for(int i = 0; i < m; ++i) {
for(int j = '0'; j <= '9'; ++j) {
int tmp = i;
while(tmp && a[tmp + 1] != j) tmp = nxt[tmp];
if(a[tmp + 1] == j) ++tmp;
if(tmp != m) ++A.c[i][tmp];
}
}
mat ans;
ans.c[0][0] = 1;
while(n) {
if(n & 1) ans = ans * A;
A = A * A; n >>= 1;
}
int Ans = 0;
for(int i = 0; i < m; ++i) (Ans += ans.c[0][i]) %= mod;
printf("%d\n", Ans);
return 0;
}
LGOJP3193 [HNOI2008]GT考试的更多相关文章
- 1009: [HNOI2008]GT考试
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数\(X_1X_ ...
- 【bzoj1009】[HNOI2008]GT考试
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3018 Solved: 1856[Submit][Statu ...
- BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 ...
- BZOJ 1009: [HNOI2008]GT考试( dp + 矩阵快速幂 + kmp )
写了一个早上...就因为把长度为m的也算进去了... dp(i, j)表示准考证号前i个字符匹配了不吉利数字前j个的方案数. kmp预处理, 然后对于j进行枚举, 对数字0~9也枚举算出f(i, j) ...
- [HNOI2008] GT考试
[HNOI2008] GT考试 标签 : DP 矩阵乘法 题目链接 题意 n位数中不出现一个子串的方案数. 题解 \(设dp[i][j]\)为前i位匹配到j时的合法方案数.(所谓合法,就是不能有别的匹 ...
- BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法
BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考 ...
- BZOJ1009 [HNOI2008]GT考试 矩阵
去博客园看该题解 题目 [bzoj1009][HNOI2008]GT考试 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2….Xn(0<=Xi<=9),他不希望准 ...
- BZOJ 1009 [HNOI2008]GT考试 (KMP + 矩阵快速幂)
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4266 Solved: 2616[Submit][Statu ...
- bzoj1009 / P3193 [HNOI2008]GT考试
P3193 [HNOI2008]GT考试 设$f[i][j]$表示主串匹配到第$i$个位置,不吉利数字匹配到第$j$个位置 $g[i][j]$表示加上某数字使子串原来最多能匹配到第$i$个数字,现在只 ...
随机推荐
- 微信第三方平台代公众号发起网页授权 48001 api unauthorized 问题
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&gr ...
- pom.xml文件引入tools.jar
最近做hbase开发时,引入相关jar包后,出现了以下错误 Missing artifact jdk.tools:jdk.tools:jar:1.8 绝对地址引用 <dependency> ...
- cad.arx 自定义实体之编译第一个项目(甜头)
本篇不从零开始讲如何制造自定义图元,而是教新手们如何设置了环境之后编译张帆书中的代码. 利用vs2010编译 张帆<AutoCAD ObjectARX(VC)开发基础与实例教程>一书中的自 ...
- QuantLib 金融计算——收益率曲线之构建曲线(4)
[TOC] 如果未做特别说明,文中的程序都是 C++11 代码. QuantLib 金融计算--收益率曲线之构建曲线(4) 本文代码对应的 QuantLib 版本是 1.15.相关源代码可以在 Qua ...
- 1.1 关于LVM的创建、删除、扩容和缩减
一.新建LVM的过程 1.使用fdisk 新建分区 修改ID为8e 3.使用 pvcreate 创建 PV 4.使用 vgcreate 创建 VG 5.使用 lvcreate 创建 LV 6.格 ...
- zk脑裂
一.为什么zookeeper要部署基数台服务器?二.zookeeper脑裂(Split-Brain)问题2.1.什么是脑裂?2.2.什么原因导致的?2.2.zookeeper是如何解决的?一.为什么z ...
- Visual Studio pro key license 2019
仅供学习交流使用,勿用作其他用途!!!! Visual Studio 2019 Enterprise BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 201 ...
- Java Base64Utils
Java Base64Utils /** * <html> * <body> * <P> Copyright 1994 JsonInternational</ ...
- C# 接口、抽象类、以及事件
接口.抽象类,用于项目集成,如: Interface icls = appid == "A" ? new ClassA() : new ClassA();icls.func(&qu ...
- centos从零开始安装elasticSearch
前言:elasticSearch作为一款优秀的分布式搜索工具,被广泛用在数据搜集和整理的业务中,知名的比如有github就是采用es来精准的搜索几千万行代码,百度也大量应用es做数据爬取分析,本篇博客 ...