1009

思路:

  KMP上走DP(矩阵加速);

  DP[i][j]表示当前在第i位,同是匹配到不吉利串的第j位的方案数;

代码:

#include <bits/stdc++.h>
using namespace std;
int mod;
struct MatrixType {
int n,m,ai[][];
void mem(int n_,int m_)
{
n=n_,m=m_;
for(int i=;i<=n;i++)
{
for(int v=;v<=m;v++) ai[i][v]=;
}
}
MatrixType operator*(const MatrixType pos)const
{
MatrixType res;
res.mem(n,pos.m);
for(int i=;i<=res.n;i++)
{
for(int k=;k<=res.m;k++)
{
for(int v=;v<=m;v++) res.ai[i][k]=(res.ai[i][k]+(ai[i][v]*pos.ai[v][k])%mod)%mod;
}
}
return res;
}
void debug()
{
puts("");
for(int i=;i<=n;i++)
{
for(int v=;v<=m;v++) printf("%d ",ai[i][v]);
putchar('\n');
}
puts("");
}
};
int n,m,ti[],Next[],last[],to[][];
void poww(MatrixType res,MatrixType pos,int mi)
{
while(mi)
{
if(mi&) res=res*pos;
mi=mi>>,pos=pos*pos;
}
long long ans=;
for(int i=;i<m;i++) ans=(ans+res.ai[][i])%mod;
cout<<ans;
}
int main()
{
freopen("data.txt","r",stdin);
scanf("%d%d%d",&n,&m,&mod);
char ch[];scanf("%s",ch+);
for(int i=;i<=m;i++) ti[i]=ch[i]-'';
for(int i=;i<m;i++)
{
int v=Next[i];
while(v&&ti[i+]!=ti[v+]) v=Next[v];
Next[i+]=ti[i+]==ti[v+]?v+:;
}
for(int i=;i<m;i++)
{
for(int v=;v<=;v++)
{
to[i][v]=ti[i+]==v?i+:to[Next[i]][v];
}
}
MatrixType sta,tmp;
sta.mem(,m-),sta.ai[][]=;
tmp.mem(m-,m-);
for(int i=;i<m;i++)
{
for(int v=;v<=;v++)
{
if(to[i][v]!=m) tmp.ai[i][to[i][v]]++;
}
}
poww(sta,tmp,n);
return ;
}

AC日记——[HNOI2008]GT考试 bzoj 1009的更多相关文章

  1. AC日记——[HNOI2008]玩具装箱toy bzoj 1010

    1010 思路: 斜率优化DP: 跪烂大佬 代码: #include <bits/stdc++.h> using namespace std; #define maxn 50005 #de ...

  2. AC日记——[HNOI2008]越狱 bzoj 1008

    1008 思路: 越狱情况=总情况-不越狱情况: 代码: #include <cstdio> #include <cstring> #include <iostream& ...

  3. AC日记——[HNOI2008]水平可见直线 bzoj 1007

    1007 思路: 维护一个下凸壳: 用单调栈来维护这玩意儿: 先将斜率排序: 然后判断栈顶元素和当前元素的交点x是否小于栈顶元素和栈顶上一个元素的交点x: 注意: 人神共愤的精度问题和输出空格问题: ...

  4. AC日记——[HEOI2012]旅行问题 bzoj 2746

    2746 思路: 建立ac自动机,然后把fail树抽出来: 然后在fail树上走lca(神奇): 代码: #include <cstdio> #include <vector> ...

  5. AC日记——[SCOI2010]幸运数字 bzoj 1853

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2405  Solved: 887[Submit][Status] ...

  6. GT考试 BZOJ 1009

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

  7. AC日记——明明的烦恼 bzoj 1005

    1005 思路: prufer编码+组合数: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 #de ...

  8. AC日记——Mato的文件管理 bzoj 3289

    3289 思路: 莫队求区间逆序对个数,树状数组维护: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 500 ...

  9. AC日记——[Scoi2010]序列操作 bzoj 1858

    1858 思路: 恶心: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct Tree ...

随机推荐

  1. 使用restClient工具发送post请求并带参数

    运行 restClient 点 Method选项卡,选中post方法 然后切换到 Body选项卡,点右边的 倒三角,选 String body 出现如下窗口: 点击右边红圈里的按钮,弹出窗口: 点是, ...

  2. BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵乘法)

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 Description 潘塔 ...

  3. Android LocalBroadcastManager解析

    阿里巴巴Android开发手册[强制]避免使用隐式 Intent 广播敏感信息,信息可能被其他注册了对应BroadcastReceiver 的 App 接收.说明:通过 Context#sendBro ...

  4. sql service (case when then else end ..... group by)

    1. 原表: courseid coursename score ------------------------------------- 1 java 70 2 oracle 90 3 xml 4 ...

  5. 线程阶段性总结——APM,ThreadPool,Task,TaskScheduler ,CancellationTokenSource

    不管我们使用thread,threadPool,task,还是APM异步,本质都是在使用多线程.对于新手来说,不太敢用多线程的原因,就我个人的体验来说,就是对多线程的异常捕获方式或时机缺乏了解,而一旦 ...

  6. Epoll模型讲解

    1.流模型 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. 不管是文件,还是套接字,还是管道,我们都可以把他们看作流. 之后我们来讨论I/O的操作, ...

  7. 记一次rsync日志报错directory has vanished

    中午两点的时候邮件告知rsync同部svn源库失败,看rsync日志报错显示如上,当时还在上课,没在公司,怀疑是不是有人动了svn的版本库,后来询问同事并通过vpn登录服务器上查看版本库是正常的,也没 ...

  8. 32岁白发菜鸟拿2.6万年薪苦熬10年 NBA首秀便惊艳世人 科比书豪纷纷为他点赞

    这是一场普通的常规赛——斯台普斯球馆,湖人的赛季第81场.比赛的结果也没什么意外:客场作战的火箭106-99带走胜利.然而,这一场的斯台普斯却成了欢乐的海洋,现场甚至喊出了MVP的呼声,这份赞誉,送给 ...

  9. 基本控件文档-UIKit结构图---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址  UIKit结构图 //转载请注明出处--本文永久链接:http://www.cnbl ...

  10. Winform MD5

    1:MD5 http://www.cmd5.com/ 字节数组----字符串 //将字节数组中每个元素按照指定的编码格式解析成字符串//直接将数组ToString()//将字节数组中的每个元素ToSt ...