bzoj1009 / P3193 [HNOI2008]GT考试
设$f[i][j]$表示主串匹配到第$i$个位置,不吉利数字匹配到第$j$个位置
$g[i][j]$表示加上某数字使子串原来最多能匹配到第$i$个数字,现在只能匹配到第$j$个数字的方案
那么可以列出方程
$f[i][j]=\sum_{k=0}^{m-1}f[i-1][k]*g[k][j]$
而后面的方案数暴力枚举似乎不行
仔细观察发现介个可以用kmp搞鸭
但是$n<=1e9$,$O(n)$也不行
再仔细观察发现这个式子可以用矩乘搞鸭
蓝后就结束了。
#include<iostream>
#include<cstdio>
#include<cstring>
#define re register
using namespace std;
char q[];
int n,m,k,f[],ans;
struct matrix{
int a[][];
matrix(){memset(a,,sizeof(a));}
matrix operator * (const matrix &tmp) const{
matrix c;
for(int i=;i<m;++i)
for(int j=;j<m;++j)
for(int u=;u<m;++u)
c.a[i][j]=(c.a[i][j]+a[i][u]*tmp.a[u][j]%k)%k;
return c;
}
matrix Pow(matrix x,int y){
matrix res;
for(int i=;i<m;++i) res.a[i][i]=;
for(;y;y>>=,x=x*x)
if(y&) res=res*x;
return res;
}
}st,g;
void kmp(){//kmp处理方案数
int len=strlen(q);
for(int i=,j;i<len;++i){
for(j=f[i];j&&q[i]!=q[j];j=f[j]);
f[i+]= q[i]==q[j] ? j+:;
}
for(int i=,j;i<len;++i)
for(char u='';u<='';++u){
for(j=i;j&&q[j]!=u;j=f[j]);
if(q[j]==u) ++j;
if(j<m) ++g.a[i][j];
}
}
int main(){
scanf("%d%d%d",&n,&m,&k);
scanf("%s",q); kmp();
st.a[][]=; g=g.Pow(g,n);
st=st*g;
for(int i=;i<m;++i) ans=(ans+g.a[][i])%k;
printf("%d",ans);
return ;
}
bzoj1009 / P3193 [HNOI2008]GT考试的更多相关文章
- 【BZOJ1009】[HNOI2008]GT考试 next数组+矩阵乘法
[BZOJ1009][HNOI2008]GT考试 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的 ...
- 【bzoj1009】: [HNOI2008]GT考试 字符串-kmp-矩阵乘法-DP
[bzoj1009]: [HNOI2008]GT考试 先用kmp写个暴力 /* http://www.cnblogs.com/karl07/ */ #include <cstdlib> # ...
- P3193 [HNOI2008]GT考试(KMP+矩阵乘法加速dp)
P3193 [HNOI2008]GT考试 思路: 设\(dp(i,j)\)为\(N\)位数从高到低第\(i\)位时,不吉利数字在第\(j\)位时的情况总数,那么转移方程就为: \[dp(i,j)=dp ...
- 【bzoj1009】[HNOI2008]GT考试
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3018 Solved: 1856[Submit][Statu ...
- BZOJ1009:[HNOI2008]GT考试——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0&l ...
- 【bzoj1009】[HNOI2008]GT考试(矩阵快速幂优化dp+kmp)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 这道题一看数据范围:$ n<=10^9 $,显然不是数学题就是矩乘快速幂优 ...
- 【KMP】【矩阵加速】【递推】洛谷 P3193 [HNOI2008]GT考试 题解
看出来矩阵加速也没看出来KMP…… 题目描述 阿申准备报名参加 GT 考试,准考证号为\(N\)位数\(X_1,X_2…X_n(0\le X_i\le9)\),他不希望准考证号上出现不吉利的数 ...
- 洛谷P3193 [HNOI2008]GT考试(dp 矩阵乘法)
题意 题目链接 Sol 设\(f[i][j]\)表示枚举到位置串的第i位,当前与未知串的第j位匹配,那么我们只要保证在转移的时候永远不会匹配即可 预处理出已知串的每个位置加上某个字符后能转移到的位置, ...
- luogu P3193 [HNOI2008]GT考试
传送门 单串匹配显然用\(kmp\) 一个暴力的dp是设\(f_{i,j}\),表示前\(i\)位,正在匹配给定串第\(j\)位的方案,转移就枚举下一位放什么,然后使用\(kmp\)看会匹配到给定串的 ...
随机推荐
- redis学习之集群报错Node is not empty
遇到的问题及解决办法 在redis.conf里bind 真机ip后,接着重新执行每个redis.conf,最后再创建集群,但报错,如下图所示: 图中报的错即: [ERR] Node 192.168.1 ...
- MQTT协议笔记之订阅
前言 记忆不太好的时候,只能翻看以前的文章/笔记重新温习一遍,但找不到MQTT协议有关订阅部分的描述,好不容易从Evernote中找到贴出来,这样整个MQTT协议笔记,就比较齐全了. SUBSCRIB ...
- LeetCode——Palindrome Linked List
Description: Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it ...
- [算法] N 皇后
N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行.同一列.同一斜线上的皇后都会自动攻击). 一. 求解N皇后问题是算法中回溯法应用的一个经典案例 回溯算 ...
- Eclipse常用快捷键 及 不格式化注释
eclipse不格式化注释 - [自写] 2007-08-15 刚才在Eclipse3.2上写东西,我写好的注释,整整齐齐的,我一格式化代码,就变得七七八八的了. 试着在Perferences ...
- Gallery 里面怎么设置ImageView的OnClick事件
Gallery g=this.findViewById(R.id.gallery); g.setOnItemClickListener(new OnItemClickListener(){ @Over ...
- mysql如何查询日期的列表?
转自:http://blog.csdn.net/liufei198613/article/details/72643345 select @num:=@num+1,date_format(adddat ...
- jsp实现文件下载的代码(转载)
Java代码 OutputStream out=response.getOutputStream(); byte by[]=new byte[500]; File fileLoad=new Fil ...
- 单机器启动多个tomcat的配置修改
首先去apache下载一个tomcat,下载解压版的,比较方便 把这个tomcat(我下载的是tomcat7版本),解压两次,为了方便显示,我把解压出来的tomcat重命名成tomcat71和to ...
- jenkins之配置git认证方式
在使用jenkins构建时候需要从git下拉代码,需要配置认证方式 http拉取代码 配置用户名和密码认证 添加认证 设置用户名和密码 git认证 设置私钥认证