bzoj 1009:[HNOI2008]GT考试
这道题机房n多人好久之前就A了…… 我到现在才做出来……
一看就是DP+矩阵乘法,但是一开始递推式推错了…… 正确的递推式应该是二维的……
f[i][j] 表示第准考证到第 i 位匹配了 j 位的方案数
f[i][j] = f[i][j-1] + f[i][k] 第k位可以转移到第 j 位
这就需要枚举 当前位是什么, 同是还需要求一个关于m 的KMP 就可以了
上代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define M 25
using namespace std; int n, m;
long long f[M] = {}, yu;
long long a[M][M] = {}, b[M][M] = {}, c[M][M];
int next[M] = {};
char s[M]; void make_next()
{
int i = , j = -;
next[] = -;
while (i < m-)
if (j == - || s[i] == s[j])
{
i++; j++;
next[i] = j;
}
else j = next[j];
} void cheng()
{
for (int i = ; i < m; ++i)
for (int j = ; j <= m; ++j)
c[i][j] = ;
for (int i = ; i < m; ++i)
for (int j = ; j < m; ++j)
for (int k = ; k < m; ++k)
c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % yu;
swap(c, b);
} void fan()
{
for (int i = ; i < m; ++i)
for (int j = ; j <= m; ++j)
c[i][j] = ;
for (int i = ; i < m; ++i)
for (int j = ; j < m; ++j)
for (int k = ; k < m; ++k)
c[i][j] = (c[i][j] + a[i][k] * a[k][j]) % yu;
swap(c, a);
} void mi(int n)
{
for (int i = ; i < m; ++i)
b[i][i] = ;
while (n)
{
if (n & ) cheng();
n >>= ;
fan();
}
swap(a, b);
} int main()
{
scanf("%d%d%I64d", &n, &m, &yu);
scanf("%s", s);
make_next();
f[] = ;
for (int i = ; i < m; ++i) //已经匹配 i 位 正在匹配第 i+1 位
{
for (int j = ''; j <= ''; ++j) // 第 i+1 位是 j
if (j == s[i]) a[i+][i] ++; // success
else // fail find the last can pipei
{
int x = next[i];
while (x != - && s[x] != j)
x = next[x];
a[x+][i] ++;
}
}
mi(n);
long long ans = ;
for (int i = ; i < m; ++i)
{
long long zan = ;
for (int j = ; j < m; ++j)
zan = (zan + f[j] * a[i][j]) % yu;
ans = (ans + zan) % yu;
}
printf("%I64d\n", ans);
}
bzoj 1009:[HNOI2008]GT考试的更多相关文章
- BZOJ 1009: [HNOI2008]GT考试( dp + 矩阵快速幂 + kmp )
写了一个早上...就因为把长度为m的也算进去了... dp(i, j)表示准考证号前i个字符匹配了不吉利数字前j个的方案数. kmp预处理, 然后对于j进行枚举, 对数字0~9也枚举算出f(i, j) ...
- 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考试 【AC自动机 + 矩阵乘法优化DP】
题目链接:BZOJ - 1009 题目分析 题目要求求出不包含给定字符串的长度为 n 的字符串的数量. 既然这样,应该就是 KMP + DP ,用 f[i][j] 表示长度为 i ,匹配到模式串第 j ...
- bzoj 1009 [HNOI2008]GT考试(DP+KMP+矩阵乘法)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1009 [题意] 给定一个字符串T,问长度为n且不包含串T的字符串有多少种. [思路] ...
- BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路:真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...
- bzoj 1009 [HNOI2008]GT考试——kmp+矩阵优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 首先想到 确保模式串不出现 就是 确保每个位置的后缀不是该模式串. 为了dp,需要记录 ...
- 题解:BZOJ 1009 HNOI2008 GT考试 KMP + 矩阵
原题描述: 阿申准备报名参加GT考试,准考证号为N位数 X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0<=Ai&a ...
- BZOJ 1009 HNOI2008 GT考试 KMP算法+矩阵乘法
标题效果:给定的长度m数字字符串s.求不包括子s长度n数字串的数目 n<=10^9 看这个O(n)它与 我们不认为这 令f[i][j]长度i号码的最后的字符串j位和s前者j数字匹配方案 例如,当 ...
随机推荐
- oc-17-description
Book.h #import <Foundation/Foundation.h> @interface Book : NSObject { NSString *_bookName; // ...
- Winform开发--控件
WinForm控件开发总结目录 WinForm控件开发总结目录 WinForm控件开发总结(一)------开篇 WinForm控件开发总结(二)------使用和调试自定义控件 WinForm控件开 ...
- XMPP协议、IM、客户端互联详解
导读 对于推送,IM服务器,目前可以使用一些厂家提供的SDK来实现,但是我们的老板又总是担心使用别人的SDK,假如别人的服务出现问题,或者别人偷看咱们的信息,那岂不是出现很大问题了 聊一聊xmpp的服 ...
- Linux服务器集群系统(四)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs4.html LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 2002 年 5 月 ...
- 快递鸟顺丰电子面单接口API-JAVA
一.电子面单对接案例 1.接口描述 接口支持的消息接收方式:HTTP POST 请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;cha ...
- 2.1.4 扫描器X-Scan查本机隐患
X-Scan是由安全焦点开发的一个功能强大的扫描工具.它采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能. 1.用X-Scan查看本机IP地址 利用X-Scan扫描器来查看本机的 ...
- 【Shell脚本学习20】Shell until循环
until 循环执行一系列命令直至条件为 true 时停止.until 循环与 while 循环在处理方式上刚好相反.一般while循环优于until循环,但在某些时候,也只是极少数情况下,until ...
- Linux下cut命令使用
标题:cut命令的使用 作用:cut命令是对文件以行为单位,按照字节.字符.指定的域分隔符对行进行剪切,提取所需要的片段内容. 一.用法: cut [-bn] [file] 或cut -c [file ...
- linux之磁盘配额(quota)
1.什么是quota 简单的说就是限制用户对磁盘空间的使用量. 因为Linux是多用户多任务的操作系统,许多人共用磁盘空间,为了合理的分配磁盘空间,于是就有了quota的出现. 2.quota的用途 ...
- MySQL5.0版本的安装图解教程
MySQL5.0版本的安装图解教程是给新手学习的,当前mysql5.0.96是最新的稳定版本. mysql 下载地址 http://www.jb51.net/softs/2193.html 下面的是M ...