其实kmp真的很次要,求长度为20的kmp感觉真的有点杀鸡用牛刀

这题思路相当明确:一看题就是数位dp,一看n的大小就是矩阵

矩阵的构造用m*m比较方便,本来想写1*m的矩阵乘m*m的,但是感觉想起来太麻烦就偷懒,没想到1A了

log的速度的确可以,87ms贼快,好久没见这么短的运行时间了

 #include <cstdio>
int n,m,mod,k;
char ch;
int a[],ne[];
int ans[][],t[][],zy[][];
void mul(bool b)
{
for(int i=;i<m;i++)
for(int j=;j<m;j++)
for(k=,t[i][j]=;k<m;k++)
t[i][j]=(t[i][j]+(b?ans[i][k]:zy[i][k])*zy[k][j])%mod;
for(int i=;i<m;i++)
for(int j=;j<m;j++)
if(b) ans[i][j]=t[i][j];
else zy[i][j]=t[i][j];
if(b) n--;else n/=;
}
int main()
{
scanf("%d%d%d",&n,&m,&mod);
for(ch=getchar();ch<'' || ch>'';ch=getchar());
for(int i=;i<=m;i++,ch=getchar())
a[i]=ch-'';
for(int i=;i<=m;i++)
{
int k=ne[i-];
while(k && (a[k+]!=a[i])) k=ne[k];
ne[i]=k+(a[k+]==a[i]);
}
for(int i=;i<m;i++)
for(int j=;j<=;j++)
{
int k=i;
while(k && a[k+]!=j) k=ne[k];
k+=(a[k+]==j);
if(k!=m) zy[k][i]++;
}
for(int i=;i<m;i++)
ans[i][i]=;
while(n)
mul(n&);
int sum=;
for(int i=;i<m;i++)
sum=(sum+ans[i][])%mod;
printf("%d",sum);
return ;
}

bzoj1009矩阵快速面+kmp的更多相关文章

  1. BZOJ1009 矩阵快速幂+DP+KMP

    Problem 1009. -- [HNOI2008]GT考试 1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: ...

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

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

  3. [HNOI2008] GT考试(DP+矩阵快速幂+KMP)

    题目链接:https://www.luogu.org/problemnew/show/P3193#sub 题目描述 阿申准备报名参加 GT 考试,准考证号为 N 位数 X1,X2…Xn(0 <= ...

  4. [BZOJ1009][HNOI2008]GT考试 DP+矩阵快速幂+KMP

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1009 我们令$dp(i,j)$表示已经填了$i$位,而且后缀与不幸运数字匹配了$j$位,那 ...

  5. BZOJ1009: [HNOI2008]GT考试 矩阵快速幂+kmp+dp

    这个题你发现打暴力的话可以记忆化搜素加剪枝,那么意味着可以递推,我们搜的话就是1010^9我们就往下匹配遇到匹配成功就return,那么我们可以想一下什么决定了状态,我们考虑kmp的过程,对于我们目前 ...

  6. 【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)

    [BZOJ1009]GT考试(KMP算法,矩阵快速幂,动态规划) 题面 BZOJ 题解 看到这个题目 化简一下题意 长度为\(n\)的,由\(0-9\)组成的字符串中 不含串\(s\)的串的数量有几个 ...

  7. [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)

    [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...

  8. 2018.10.22 bzoj1009: [HNOI2008]GT考试(kmp+矩阵快速幂优化dp)

    传送门 f[i][j]f[i][j]f[i][j]表示从状态"匹配了前i位"转移到"匹配了前j位"的方案数. 这个东西单次是可以通过跳kmp的fail数组得到的 ...

  9. [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)

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

随机推荐

  1. Java学习——连接数据库

    1.去官网下载对应版本的Ojdbc.jar(oracle).sqljdbc.jar(sqlserver). 2.放置到项目lib文件夹下 3.项目右键->Build Path->confi ...

  2. Visual Studio的背景插件

    分享一个Visual Studio的背景插件,让堆码更富情趣..哈哈   忘记一件重要的事情,我使用的是VS 2012版,其他更高版本应该是可以找到的,以下版本就不清楚了.有可能找不到,见谅,也不是我 ...

  3. RBAC权限模型

    RBAC 现在大多数的管理系统都是基于RBAC开发的组织机构权限框架.所有的操作都是基于角色(Role)来完成的.我们先从需求的角度出发,来了解关于系统权限管理. 用户A和用户B都属于研发部,我们可以 ...

  4. c/c++中关于sizeof、strlen的使用说明

    sizeof: 一般指类型.变量等占用的内存大小(由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小) strlen: c字符串的长度(参数必须是字符型指针 char*,当数组名作 ...

  5. 得到 window.open 新页面中的数据

    1.htm 页面 单击按  '钮后'  调用window.open方法,开启新窗口  2.htm 想实现---------------------- 在2.htm页面单击按钮 将相应的数据返回到 1. ...

  6. nginx配置为windows服务中的坑

    网上搜索“nginx 配置为windows服务”,很容易搜索到使用windows server warpper来配置,于是按照网上的方法我从github上的链接下载了1.17版本,前面都很顺利,很容易 ...

  7. RecyclerView的使用之多种Item加载布局

    精益求精,为了更加透彻熟练得掌握,本文再次给大家介石介绍下如何利用RecyclerView实现多Item布局的加载,多Item布局的加载的意思就是在开发过程中List的每一项可能根据需求的不同会加载不 ...

  8. python笔记7:日期和时间

    Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. 时间 ...

  9. 关于PowerDesigner出现不允许有扩展属性,或对象不存在的解决办法(SQLSERVER2008下亲测可用)

    在Generate Database弹出框,选择options选项卡,右边的勾选去除所有Comment的勾选(目测是comment注释生成的语句有问题),应该也可以更改生成语句,暂时这样解决

  10. ubuntu selinux

    apt install selinux-utils apt install policycoreutils https://zhidao.baidu.com/question/917938889387 ...