GT考试 BZOJ 1009
GT考试
【问题描述】
阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字。
他的不吉利数学A1A2...Am(0<=Ai<=9)有M位,不出现是指X1X2...Xn中没有恰好一段等于A1A2...Am. A1和X1可以为0
【输入格式】
第一行输入N,M,K.接下来一行输入M位的数。
【输出格式】
阿申想知道不出现不吉利数字的号码有多少种,输出模K取余的结果.
【样例输入】
4 3 100
111
【样例输出】
81
【数据范围】
N<=10^9, M<=20, K<=1000
题解:
设f[i][j]表示至准考证号前i位,最多匹配到不吉利数的第j位的方案数
设a[i][j]表示在不吉利数的前i位后加上一个字符能匹配到不吉利数的第j位的字符的数量(枚举字符用KMP求出a矩阵)
那么转移方程:
答案:
发现转移方程可以用矩阵乘法优化
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
int n, m, t, mo, sum, s[], ne[];
struct ccc
{
int v[][];
ccc()
{
memset(v, , sizeof(v));
}
friend ccc operator * (ccc a, ccc b)
{
ccc ans;
for(int i = ; i < m; ++i)
for(int j = ; j < m; ++j)
for(int k = ; k < m; ++k)
ans.v[i][j] = (ans.v[i][j] + a.v[i][k] * b.v[k][j]) % mo;
return ans;
}
friend ccc operator ^ (ccc a, int b)
{
ccc ans;
for(int i = ; i <= m; ++i) ans.v[i][i] = ;
for(int i = b; i; i >>= , a = a * a)
if(i & )
ans = ans * a;
return ans;
}
};
ccc a, c;
int main()
{
scanf("%d%d%d", &n, &m, &mo);
getchar();
for(int i = ; i <= m; ++i) s[i] = getchar() - '';
t = ;
for(int i = ; i <= m; ++i)
{
while(t > && s[i] != s[t + ]) t = ne[t];
if(s[i] == s[t + ]) ++t;
ne[i] = t;
}
for(int i = ; i < m; ++i)
for(int j = ; j <= ; ++j)
{
t = i;
while(t > && s[t + ] != j) t = ne[t];
if(s[t + ] == j) ++t;
if(t != m) a.v[t][i] = (a.v[t][i] + ) % mo;
}
for(int i = ; i < m; ++i)
{
for(int j = ; j < m; ++j)
printf("%d ", a.v[i][j]);
printf("\n");
}
c = a ^ n;
for(int i = ; i < m; ++i) sum = (sum + c.v[i][]) % mo;
printf("%d", sum);
}
GT考试 BZOJ 1009的更多相关文章
- AC日记——[HNOI2008]GT考试 bzoj 1009
1009 思路: KMP上走DP(矩阵加速): DP[i][j]表示当前在第i位,同是匹配到不吉利串的第j位的方案数: 代码: #include <bits/stdc++.h> using ...
- [BZOJ 1009] [HNOI2008] GT考试 【AC自动机 + 矩阵乘法优化DP】
题目链接:BZOJ - 1009 题目分析 题目要求求出不包含给定字符串的长度为 n 的字符串的数量. 既然这样,应该就是 KMP + DP ,用 f[i][j] 表示长度为 i ,匹配到模式串第 j ...
- BZOJ 1009 GT考试
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...
- BZOJ 1009: [HNOI2008]GT考试( dp + 矩阵快速幂 + kmp )
写了一个早上...就因为把长度为m的也算进去了... dp(i, j)表示准考证号前i个字符匹配了不吉利数字前j个的方案数. kmp预处理, 然后对于j进行枚举, 对数字0~9也枚举算出f(i, j) ...
- BZOJ 1009 HNOI 2008 GT考试 递推+矩乘
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3679 Solved: 2254[Submit][Statu ...
- 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.. ...
- GT考试(bzoj 1009)
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...
- BZOJ 1009 【HNOI2008】 GT考试
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...
随机推荐
- GRANT - 定义访问权限
SYNOPSIS GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ ...
- django连接Oracle过程中出现的问题
开始时版本信息: python 3.6 + ce_oracle 6 最终版本信息: python 3.5 + ce_oracle 5.2 ce_oracle版本问题 cx_Oracle-5 ...
- shell脚本,提示用户输入一个用户名,如果存在;显示用户UID和SHELL信息;否则,则显示无此用户;显示完成之后,提示用户再次输入;如果是quit则退出;
[root@localhost wyb]# cat tishiuser.sh #!/bin/bash #提示用户输入一个用户名,如果存在:显示用户UID和SHELL信息:否则, #则显示无此用户:显示 ...
- java在线聊天项目0.9版 实现把服务端接收到的信息返回给每一个客户端窗口中显示功能之客户端接收
客户端要不断接收服务端发来的信息 与服务端不断接收客户端发来信息相同,使用线程的方法,在线程中循环接收 客户端修改后代码如下: package com.swift; import java.awt.B ...
- CentOS 7 升级gcc/g++编译器
gcc的升级必须要使用源码进行升级,也就说,必须要使用源码进行编译才行.我的7.2的CentOS目前自带的gcc是4.8.5的,gcc从4.8之后开始支持C++11,但是鉴于现在C++14.C++17 ...
- 几种优化web页面加载速度的策略
剥离静态资源请求到CDN 一般在主域名下的HTTP请求里都会携带大量Cookie信息,最大4KB,每个域名下最多50条:但如果仅仅访问js/css/jpeg等静态资源文件的话是不需要Cookie信息, ...
- Python语言程序设计之三--列表List常见操作和错误总结
最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小.像我看的这本<Python语言程序设计>--梁勇著,列表和多维列表两章课后习题就有93道之多.我的天!但是题目出的非常 ...
- gnu make规则记录
1. $(shell CMD) 名称: 执行 shell 命令函数 功能: 在新的 shell 中执行 CMD 命令 返回值: CMD 在 shell 中执行的结果 例如:PLATFORM=$(she ...
- 关于springmvc返回json格式数据
1.引入maven依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifac ...
- Java-计算程序运行时间
package com.tj; @SuppressWarnings("unused") public class CountTime { public static void ma ...