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\)看会匹配到给定串的 ...
随机推荐
- select 相关 获取当前项以及option js选定
$("#product option[value='170']").prop("selected","true")//要确定是selecte ...
- url-loader与file-loader
一开始用url-loader的时候,想着为什么npm run build的时候,不能将图片打包到build images的目录下,原来,没有自己看这样的说明: loader 后面 limit 字段代表 ...
- 用ajax实现用户名的检测(JavaScript方法)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- struts2的核心和工作原理 <转>
在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就 ...
- Spring AOP依赖包
Spring4和2.5发生了很大的变化,原来的spring2.5很多倚赖的jar包都是随着spring一起发布的,现在spring4已 经不再发布倚赖包,需要你自己去导入 1.org.springfr ...
- Linux系统下Redis缓存安装配置
Redis是一个高性能的key-value数据库,现时越来越多企业与应用使用Redis作为缓存服务器.楼主是一枚JAVA后端程序员,也算是半个运维工程师了.在Linux服务器上搭建Redis,怎么可以 ...
- Linux配置Nginx,MySql,php-fpm开机启动的方法
一. Nginx 开机启动 1.在/etc/init.d/目录下创建脚本 vim /etc/init.d/nginx 2.编写脚本内容 (将以下复制进去相应改动安装路径) 1 2 3 4 5 6 7 ...
- <select>里动态添加option
因为是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因. 如有冒犯请联系本人,或删除,或标明出处. 因为好的文章,以前只想收藏,但连接有时候会失效,所以 ...
- 组织机构代码校验码生成算法(C#版)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 南京网络赛B-The writing on the wall
30.43% 2000ms 262144K Feeling hungry, a cute hamster decides to order some take-away food (like frie ...