bzoj1009: [HNOI2008]GT考试(kmp+矩阵乘法)
1009: [HNOI2008]GT考试
题目:传送门
题解:
看这第一眼是不是瞬间想起组合数学???
没错...这样想你就GG了!
其实这是一道稍有隐藏的矩阵乘法,好题!
首先我们可以简化一下题意:给出一个串,要求这个串不包含另一个串的方案个数
这不是kmp吗?!(直接暴力肯定炸)
我们可以再往DP的方面想
f[i][j]表示长度为i的母串的后缀与子串匹配j个长度的方案数
那么ans=Sigma(f[n][0]~f[n][m-1])
那么我们再定义一个c[i][j]表示在子串长度为i的前缀后面加上一个数,令该前缀加上这个数所组成的新字符串与给出子串从头开始所能匹配的长度为j的方案数
那么f[i+1][k]=f[i][j]*c[j][k]
但是还是会炸啊!!!!!!!
这时候怎么就想不到矩乘加速呢?!
c数组不变,而且每次f都要乘一次,很明显可以用矩阵乘法。。。
所以用kmp预处理矩阵就ok,但是c[i][m]不能继承,所以只能从w[i][0]继承,矩乘时就枚举0~m-1
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
struct matrix
{
int m[][];
matrix(){memset(m,,sizeof(m));}
}ans;
char st[];
int p[];
int n,m,mod;
matrix multi(matrix a,matrix b,int n,int m,int p)//[n,m]*[m,p];
{
matrix c;
for(int i=;i<n;i++)
for(int j=;j<p;j++)
for(int k=;k<m;k++)
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
return c;
}
matrix p_m(matrix a,int b)
{
matrix sum;
for(int i=;i<m;i++)sum.m[i][i]=;
while(b)
{
if(b%==)sum=multi(sum,a,m,m,m);
a=multi(a,a,m,m,m);b/=;
}
return sum;
}
void kmp()
{
p[]=;int j;
for(int i=;i<=m;i++)
{
j=p[i-];
while(j && st[i]!=st[j+])j=p[j];
if(st[i]==st[j+])j++;
p[i]=j;
}
for(int i=;i<m;i++)
{
for(int y=;y<=;y++)
{
j=i;
while(j && st[j+]-''!=y)j=p[j];
if(st[j+]-''==y)j++;
ans.m[j][i]=(ans.m[j][i]+)%mod;
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&mod);
scanf("%s",st+);
kmp();
ans=p_m(ans,n);
int sum=;
for(int i=;i<m;i++)sum=(sum+ans.m[i][])%mod;
printf("%d\n",sum%mod);
return ;
}
bzoj1009: [HNOI2008]GT考试(kmp+矩阵乘法)的更多相关文章
- [bzoj1009][HNOI2008]GT考试——KMP+矩阵乘法
Brief Description 给定一个长度为m的禁止字符串,求出长度为n的字符串的个数,满足: 这个字符串的任何一个字串都不等于给定字符串. 本题是POJ3691的弱化版本. Algorithm ...
- BZOJ1009: [HNOI2008]GT考试(KMP+矩阵乘法)
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...
- [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)
Description 阿 申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学 A1A2...Am(0&l ...
- BZOJ 1009 [HNOI2008]GT考试 (KMP+矩阵乘法)
---恢复内容开始--- 题目大意:给定一个由数字构成的字符串A(len<=20),让你选择一个长度为n(n是给定的)字符串X,一个合法的字符串X被定义为,字符串X中不存在任何一段子串与A完全相 ...
- bzoj1009 [HNOI2008]GT考试——KMP+矩阵快速幂优化DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串计数DP问题啊...连题解都看了好多好久才明白,别提自己想出来的蒟蒻我... 首 ...
- [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)
[BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...
- BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法
BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法 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 ...
- bzoj 1009: [HNOI2008]GT考试 -- KMP+矩阵
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数X1X2.. ...
- 题解:BZOJ 1009 HNOI2008 GT考试 KMP + 矩阵
原题描述: 阿申准备报名参加GT考试,准考证号为N位数 X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0<=Ai&a ...
随机推荐
- ASP.NET-属性与过滤器
目的:在调用操作之前或者之后执行特定的逻辑代码 系统定义: 1.日志记录 2.防图像盗链 3.爬虫 4.本地化,用于设定区域设置 5.动态操作,用于将操作注入到控制器当中 用来过滤HTTP请求 高级 ...
- ASP.NET-post、get的区别
post.get的区别 1.get通过把参数加在浏览器的地址栏中提交(最大2K),用post可以进行文件的提交: 2.使用post提交的页面在点击[刷新]按钮的时候浏览器一般会提示"是否重新 ...
- ZJOI—— 密码机(2003)
ZJOI2003密码机,没找到可以测试的网站,就只过了样例~~ 题目描述 一台密码机按照以下的方式产生密码:首先往机器中输入一系列数,然后取出其中一部分数,将它们异或以后得到一个新数作为密码.现在请你 ...
- Android 中模仿 Twitter 实现 Toolbar Indicator
项目地址:https://github.com/nekocode/ToolbarIndicator
- sqlzoo练习答案--SELECT names/zh
name continent Afghanistan Asia Albania Europe Algeria Africa Andorra Europe Angola Africa .... name ...
- 云server之间实时文件同步和文件备份的最简单高效的免费方案
分布于不同云计算中心的多台云server,通常须要进行文件同步.以满足业务的须要. 传统的文件同步方案,部署繁琐.同步实时性差.无法令人惬意. 端端Clouduolc,一款纯p2p方式的文件实时 ...
- zzulioj--1708--01串也疯狂之光棍也有伴(dp)
1708: 01串也疯狂之光棍也有伴 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 199 Solved: 50 SubmitStatusWeb B ...
- MyBatis数据持久化(九)动态sql
本文摘自:mybatis参考文档中文版 MyBatis的一个强大的特性之一通常是它的动态SQL能力.如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能 ...
- 【原创】JAVA word转html
import java.io.File; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; impor ...
- 优动漫PAINT中误删工具怎么办?
最近收到一些小伙伴的提问,说我不小心把 XXX工具从面板上删掉了怎么办?本教程就来给大家分 享一下遇到这个问题时的三种解决方法,遇到同样问题的小伙伴们赶紧进来看一下哟! 优动漫PAINT下载:http ...