BZOJ 1009 :[HNOI2008]GT考试(KPM算法+dp+矩阵快速幂)
这道到是不用看题解,不过太经典了,早就被剧透一脸了
这道题很像ac自动机上的dp(其实就是)
然后注意到n很大,节点很小,于是就可以用矩阵快速幂优化了
时间复杂度为o(m^3 *log n);
蒟蒻kpm写得少,改了好久= =
CODE:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,mod;
#define maxn 30
char c[maxn];
struct martix{
int r,c;int f[maxn][maxn];
int init(int x){
r=c=x;
for (int i=1;i<=x;i++) f[i][i]=1;
}
}a,b;
martix operator * (const martix &x,const martix &y){
martix ans;
ans.r=x.r;
ans.c=y.c;
for (int i=1;i<=ans.r;i++)
for (int j=1;j<=ans.c;j++){
ans.f[i][j]=0;
for (int k=1;k<=x.c;k++)
ans.f[i][j]=((x.f[i][k]*y.f[k][j])%mod+ans.f[i][j])%mod;
}
return ans;
}
martix quick(int x,martix y){
martix ans;
ans.init(y.r);
for (;x;x>>=1){
if (x&1) ans=ans*y;
y=y*y;
}
return ans;
}
int next[maxn];
int main(){
scanf("%d%d%d",&n,&m,&mod);
scanf("%s",c+1);
int t=0;
next[1]=0;
for (int i=2;i<=m;i++) {
while (t&&c[t+1]!=c[i]) t=next[t];
next[i]=c[t+1]!=c[i]?0:++t;
}
a.r=a.c=m+1;
for (int i=1;i<=m;i++) a.f[i][i+1]=1;
a.f[1][1]=9;
for (int i=1;i<m;i++) {
int sum=1;
{
for (int j=2;j<=m+1;j++)
if (a.f[next[i]+1][j]&&c[j-1]!=c[i+1]){
a.f[i+1][j]=a.f[next[i]+1][j];sum+=a.f[i+1][j];
}
}
a.f[i+1][1]=10-sum;
}
a=quick(n,a);
b.r=1;b.c=1+m;
b.f[1][1]=1;
a=b*a;
int ans=0;
for (int i=1;i<=m;i++) (ans+=a.f[1][i])%=mod;
printf("%d",ans);
return 0;
}
转载于:https://www.cnblogs.com/New-Godess/p/4348932.html
BZOJ 1009 :[HNOI2008]GT考试(KPM算法+dp+矩阵快速幂)相关推荐
- BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路: 真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...
- 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂
[题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...
- Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...
- 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs
http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...
- bzoj 1009: [HNOI2008]GT考试(dp+kmp+矩阵快速幂)
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3932 Solved: 2398 [Submit][Sta ...
- BZOJ 1009 [HNOI2008]GT考试
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2154 Solved: 1327 [Submit][Sta ...
- BZOJ 1009:[HNOI2008]GT考试
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1009 大意:给一个长度不大于20的数字串,求长度为N(10^9)的所有数字串中不包含该串 ...
- BZOJ[1009] [HNOI2008]GT考试
了了已久的心结 f[i][j]表示到第i为,长度为j的后缀与不吉利数字的前缀相同,其实这个和一些期望概率的DP类似,利用a数组记录当前j在加上不同的数字之后,可以分别转移至那些状态,用KMP处理一下, ...
- BZOJ 2004 公交线路(状压DP+矩阵快速幂)
注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压. 然后状压DP一下,用矩阵快速幂加速运算即可. #include <stdio.h> #include ...
- bzoj 3329: Xorequ(DP+矩阵快速幂)
3329: Xorequ Time Limit: 1 Sec Memory Limit: 256 MB Submit: 1134 Solved: 491 [Submit][Status][Disc ...
最新文章
- 经典算法详解(8)数的分组
- mybatis中的mapper设计与原理
- 好东西,各城市域名解析测试及网速测试
- visual stadio 添加 Extjs 智能提示!
- 如何使用ZBrush和3DMAX雕刻一个百夫长?
- 2015.11.27---Java
- 工作没做好,别人指出时最好装聋作哑
- keycloak授权流程详解
- IIS6、IIS7和IIS8各版本的差别
- 野人岛华娱java下载_华娱又携惊喜—《野人岛4—四季神器》评测!
- Oracle long 类型转 varchar2
- ios模拟器装ipa包_给iOS 模拟器“安装”app文件
- 13个Python必备的知识,建议收藏
- css(五)项目实战,ps切图
- IndexedDB 学习笔记
- Windows系统自带录屏功能,再也不用下录屏软件了
- PE重装系统,U盘装装系统,你学会了吗
- Main.obj : error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 long __cdecl InitD3D(struct HWND__ *)
- 心理学统治世界(1)——股民的圣经
- arduino仿真平台有哪些