bzoj1009
设f[i,j]为准考证号上第i位匹配到不吉祥数字第j位的方案数,显然j∈[0,m-1]
下面我们就要想到怎么把f[i-1]转移到f[i]
也就是当前匹配到第k位,那么下一位可能会匹配到哪一位
显然我们可以穷举下一位的字符,利用KMP求出下一位会匹配到哪一位(KMP的失配思想)
然后可以得出f[i,j]=f[i-1,0]*w[0,j]+f[i-1,1]*w[1,j]……+f[i-1,m-1]*w[m-1,j]
w[x,y]表示下一位取值能使由上一位匹配到y转移到下一位配到x的数目
然后就是矩乘+快速幂了(感觉解释的很不清楚……)
var a,b,c,w:array[..,..] of longint;
next,d:array[..] of longint;
n,m,p,i,j,k,ans:longint;
s:ansistring;
ch:char; procedure mul;
var i,j,k:longint;
begin
for i:= to m- do
for j:= to m- do
begin
c[i,j]:=;
for k:= to m- do
c[i,j]:=(c[i,j]+a[i,k]*b[k,j] mod p) mod p;
end;
end; begin
readln(n,m,p);
readln(s);
for i:= to m do
begin
while (j<>) and (s[i]<>s[j+]) do j:=next[j];
if s[i]=s[j+] then
begin
inc(j);
next[i]:=j;
end;
end;
for i:= to m- do
for j:= to do
begin
ch:=chr(j+);
k:=i;
while (k<>) and (s[k+]<>ch) do k:=next[k];
if s[k+]=ch then inc(k);
inc(w[k,i]);
end; for i:= to m- do
c[i,i]:=;
j:=;
while n> do
begin
inc(j);
d[j]:=n mod ;
n:=n shr ;
end;
for i:=j downto do
begin
a:=c;
b:=c;
mul;
if d[i]= then
begin
a:=c;
b:=w;
mul;
end;
end;
for i:= to m- do
ans:=(ans+c[i,]) mod p;
writeln(ans);
end.
bzoj1009的更多相关文章
- 【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)
[BZOJ1009]GT考试(KMP算法,矩阵快速幂,动态规划) 题面 BZOJ 题解 看到这个题目 化简一下题意 长度为\(n\)的,由\(0-9\)组成的字符串中 不含串\(s\)的串的数量有几个 ...
- BZOJ1009 [HNOI2008]GT考试 矩阵
去博客园看该题解 题目 [bzoj1009][HNOI2008]GT考试 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2….Xn(0<=Xi<=9),他不希望准 ...
- 【BZOJ1009】[HNOI2008]GT考试 next数组+矩阵乘法
[BZOJ1009][HNOI2008]GT考试 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的 ...
- 【bzoj1009】[HNOI2008]GT考试(矩阵快速幂优化dp+kmp)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 这道题一看数据范围:$ n<=10^9 $,显然不是数学题就是矩乘快速幂优 ...
- 【bzoj1009】: [HNOI2008]GT考试 字符串-kmp-矩阵乘法-DP
[bzoj1009]: [HNOI2008]GT考试 先用kmp写个暴力 /* http://www.cnblogs.com/karl07/ */ #include <cstdlib> # ...
- [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)
[BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...
- bzoj1009矩阵快速面+kmp
其实kmp真的很次要,求长度为20的kmp感觉真的有点杀鸡用牛刀 这题思路相当明确:一看题就是数位dp,一看n的大小就是矩阵 矩阵的构造用m*m比较方便,本来想写1*m的矩阵乘m*m的,但是感觉想起来 ...
- [bzoj1009][HNOI2008]GT考试
Description 阿申准备报名参加考试,准考证号为位数,他不希望准考证号上出现不吉利的数字. 他的不吉利数学有位,不出现是指中没有恰好一段等于. 可以为. Input 第一行输入.接下来一行输入 ...
- 【BZOJ-1009】GT考试 KMP+DP+矩阵乘法+快速幂
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2745 Solved: 1694[Submit][Statu ...
- 【BZOJ1009】【HNOI2008】GT考试
依旧看人代码写,不过我觉得自己慢慢写一个也可以写成? 原题: 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不 ...
随机推荐
- MKServerBuilder.psd1
MKServerBuilder.psd1 # # Module manifest for module 'MKServerBuilder' # # Generated by: Edward Guan ...
- CentOS 6.7安装配置Cacti监控系统
一.安装配置LAMP环境 yum -y install httpd php php-mysql php-snmp php-xml php-gd mysql mysql-server 启动http和my ...
- 学习java随笔第五篇:流程控制
条件语句 if(表达式){方法体}else if(表达体)else{方法体} 简写形式:if... 一般形式:if...else... 完整形式:if...else if...else 分支语句 sw ...
- sql脚本的格式
创建表前先判断是否存在 IF OBJECT_ID(N'TableDataDictionary') IS NULL 存储过程头:--=================================== ...
- SQL使用存儲過程訪問不同服務器
用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB', 'sql服 ...
- Script: Who’s using a database link?(找出谁在使用dblink)
Every once in awhile it is useful to find out which sessions are using a database link in an Oracle ...
- Java学习----类的组织(包)
1.包的概念 javac Engine.java -d . package:打包,把类文件编译成class文件会把Engine.class 放到com/cindy/pkg1/目录下 运行Engine ...
- jquery mobile基本结构搭建
官网:http://jquerymobile.com/ 基本结构:
- js 的对象--如何定义一个对象
通过var object={} 对象字面量,可以叫对象直接量来自定义一个对象 对象自面量是一个表达式,这个表达式的每次运算都创建并初始化一个新对象.每次计算对象字面量的时候,也都会计算他的每个属性值 ...
- ip输入框键入.或者合法数字自动选择下一个输入框效果
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...