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的更多相关文章

  1. AC日记——[HNOI2008]GT考试 bzoj 1009

    1009 思路: KMP上走DP(矩阵加速): DP[i][j]表示当前在第i位,同是匹配到不吉利串的第j位的方案数: 代码: #include <bits/stdc++.h> using ...

  2. [BZOJ 1009] [HNOI2008] GT考试 【AC自动机 + 矩阵乘法优化DP】

    题目链接:BZOJ - 1009 题目分析 题目要求求出不包含给定字符串的长度为 n 的字符串的数量. 既然这样,应该就是 KMP + DP ,用 f[i][j] 表示长度为 i ,匹配到模式串第 j ...

  3. BZOJ 1009 GT考试

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...

  4. BZOJ 1009: [HNOI2008]GT考试( dp + 矩阵快速幂 + kmp )

    写了一个早上...就因为把长度为m的也算进去了... dp(i, j)表示准考证号前i个字符匹配了不吉利数字前j个的方案数. kmp预处理, 然后对于j进行枚举, 对数字0~9也枚举算出f(i, j) ...

  5. BZOJ 1009 HNOI 2008 GT考试 递推+矩乘

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3679  Solved: 2254[Submit][Statu ...

  6. BZOJ 1009 [HNOI2008]GT考试 (KMP + 矩阵快速幂)

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4266  Solved: 2616[Submit][Statu ...

  7. bzoj 1009: [HNOI2008]GT考试 -- KMP+矩阵

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数X1X2.. ...

  8. GT考试(bzoj 1009)

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...

  9. BZOJ 1009 【HNOI2008】 GT考试

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0< ...

随机推荐

  1. HDU 4341 Gold miner (分组背包)

    先把线按照距离原点的距离排序,然后用叉积把在同一条直线上的点放在一起, 把在同一条线上的点中的前i个点当成一个点就转化成了分组背包. 写if(kas++) putchar('\n') 居然PE了,PE ...

  2. 看paper的网址

    http://www.arxiv-sanity.com/ https://scirate.com/ google搜cvpr open access.iccv open access

  3. 爬虫_python3_requests

    Requests 网络资源(URLs)撷取套件 改善Urllib2的缺点,让使用者以最简单的方式获取网络资源 可以使用REST操作(POST,PUT,GET,DELETE)存取网络资源 import ...

  4. Navicat 复制多条数据

  5. Bootstrap历练实例:小的按钮

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  6. iOS 第三方类库之MBProgressHUD

    github链接地址 MBProgressHUD是一个开源的第三方类库实现了很多种样式的提示框,类似Activity indicator,使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大, ...

  7. Web开发面临的挑战主要有哪些?

    摘要:要成为一名高效的Web开发者,这需要我们做很多工作,来提高我们的工作方式,以及改善我们的劳动成果.而在开发中难免会遇到一些困难,从前端到后端. 导读:要成为一名高效的Web开发者,这需要我们做很 ...

  8. c++ 当输入的数据不符合数据类型时,清理输入流

    if (!cin) { cin.clear(); while (cin.get() != '\n') continue; cout << "Bad input; input pr ...

  9. (37)zabbix snmp类型 无需安装agent也能监控

    概述 如果我们需要监控打印机.路由器.UPS等设备,肯定不能使用zabbix agentd,因为他们不能安装软件的,还好他们一般都支持SNMP协议,这样我可以使用SNMP来监控他们.如果你希望使用SN ...

  10. input动态模糊查询的实现方式

    最近在用jQuery实现动态模糊查询的时候,找了挺久都没有找到像Vue.js的watch属性这么好用的动态模糊查询方法.就分享一下目前遇到的坑和可以实现动态查询的几种方式. 1.jQuery的chan ...