HDU 2243 考研路茫茫——单词情结(自动机)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2243
题意:给出m个串,问有多少不大于n的串至少包含m个串中的一个?
思路:首先求出不包含m个串的长度不大于n的串的个数,也就是对应矩阵A:S=A^1+A^2+……A^n。然后就是26+26^2+26^3+……+26^n-S。
const int mod=100000; const int N=105;struct node {int next[26],fail,flag;void init(){clr(next,0);fail=-1;flag=0;} };node a[N]; int e,n,m; char s[N];void insert(char s[]) {int i,k,p=0;for(i=0;s[i];i++){k=s[i]-'a';if(a[p].next[k]==0){a[e].init();a[p].next[k]=e++;}p=a[p].next[k];}a[p].flag=1; }queue<int> Q;void build() {Q.push(0);int i,j,k,p,q;while(!Q.empty()){k=Q.front();Q.pop();for(i=0;i<26;i++){if(a[k].next[i]){p=a[k].next[i];q=a[k].fail;while(q!=-1&&!a[q].next[i]) q=a[q].fail;if(q==-1) a[p].fail=0;else{a[p].fail=a[q].next[i];a[p].flag|=a[a[p].fail].flag;}Q.push(p);}else{q=a[k].fail;while(q!=-1&&!a[q].next[i]) q=a[q].fail;if(q==-1) a[k].next[i]=0;else a[k].next[i]=a[q].next[i];}}} }u64 b[N][N],d[N][N];void mul(u64 a[][N],u64 b[][N]) {int i,j,k;u64 c[N][N]={0};FOR0(k,e) FOR0(i,e) FOR0(j,e){c[i][j]+=a[i][k]*b[k][j];}FOR0(i,e) FOR0(j,e) b[i][j]=c[i][j]; }u64 getPow(u64 a,u64 b) {u64 ans=1;while(b){if(b&1) ans=ans*a;a=a*a;b>>=1;}return ans; }void copyMatrix(u64 A[][N],u64 B[][N]) {int i,j;FOR0(i,e) FOR0(j,e) B[i][j]=A[i][j]; }u64 getSum(u64 a,u64 n) {if(n==0) return 1;if(n&1) return getSum(a,n>>1)*(1+getPow(a,n/2+1));else return getPow(a,n)+getSum(a,n/2-1)*(1+getPow(a,n/2)); }void initMatrix(u64 A[][N]) {int i,j;FOR0(i,e) FOR0(j,e) A[i][j]=0;FOR0(i,e) A[i][i]=1; }void getPOW(u64 A[][N],u64 B[][N],int n) {initMatrix(B);u64 C[N][N];copyMatrix(A,C);while(n){if(n&1) mul(C,B);mul(C,C);n>>=1;} }void addMatrix(u64 A[][N],u64 B[][N]) {int i,j;FOR0(i,e) FOR0(j,e) B[i][j]+=A[i][j]; }void print(u64 A[][N]) {int i,j;FOR0(i,e){FOR0(j,e) printf("%I64u ",A[i][j]);puts("");}puts(""); }u64 C[N][N],D[N][N],E[N][N];void getSum(u64 A[][N],u64 B[][N],int n) {if(n==0){initMatrix(B);return;}if(n&1){getSum(A,B,n/2);initMatrix(C);getPOW(A,D,n/2+1);addMatrix(C,D);mul(D,B);}else{getSum(A,B,n/2-1);getPOW(A,C,n);initMatrix(D);getPOW(A,E,n/2);addMatrix(D,E);mul(E,B);addMatrix(C,B);} }int main() {while(scanf("%d%d",&m,&n)!=-1){a[0].init();e=1;int i,j,k;FOR0(i,m) RD(s),insert(s);build();clr(b,0);FOR0(i,e) if(!a[i].flag) FOR0(j,26){k=a[i].next[j];if(!a[k].flag) b[i][k]++;}u64 sum=getSum(26,n),x=((u64)1)<<63;;getSum(b,d,n);FOR0(i,e) if(!a[i].flag) sum-=d[0][i];printf("%I64u\n",sum);}return 0; }
HDU 2243 考研路茫茫——单词情结(自动机)相关推荐
- hdu 2243 考研路茫茫——单词情结(AC自动+矩阵)
考研路茫茫--单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 2243 考研路茫茫——单词情结 求长度小于等于L的通路总数的方法
http://acm.hdu.edu.cn/showproblem.php?pid=2243 这是一题AC自动机 + 矩阵快速幂的题目, 首先知道总答案应该是26^1 + 26^2 + 26^3 .. ...
- HDU 2243考研路茫茫——单词情结 (AC自动机+矩阵快速幂)
背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般 ...
- HDU - 2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)
题目链接:点击查看 题目大意:给出 n 个词根,现在要求出长度不大于 len 的单词中,有多少单词包含至少一个词根 题目分析:如果我们反过来想,也就是求出来总的单词数,然后减去不包含词根的单词数,剩下 ...
- HDU -2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)
题目链接 思路 假设让求长度为LLL且不包含词根的个数,对所有的词根建acacac自动机,然后用矩阵MMM表示可转移状态,最后最快速幂即可. 如何求长度不超过LLL且不包含LLL且不包含词根的个数,可 ...
- 考研路茫茫――单词情结 HDU - 2243(ac自动机 + 矩阵快速幂)
考研路茫茫--单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 【HDU No. 2243】单词情结 考研路茫茫——单词情结
[HDU No. 2243]单词情结 考研路茫茫--单词情结 杭电OJ 题目地址 [题意] 单词和词根仅由小写字母组成.给定N个词根,求长度不超过L 且至少包含一个词根的单词可能有多少个? 若有两个词 ...
- hdu_2243_考研路茫茫——单词情结(AC自动机+矩阵)
题目链接:hdu_2243_考研路茫茫--单词情结 题意: 让你求包含这些模式串并且长度不小于L的单词种类 题解: 这题是poj2788的升级版,没做过的强烈建议先做那题. 我们用poj2778的方法 ...
- [hdu2243]考研路茫茫——单词情结(AC自动机+矩阵快速幂)
题意:长度不超过L,只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个. 解题关键:利用补集转化的思想,先求一个词根也不包含的单词个数,然后用总的减去即可.长度不超过L需要用矩阵维数增加一倍 ...
最新文章
- 电脑识别指令和代码的原理
- Python基础,面向对象
- GAN不只会造假:捕获数据中额外显著特征,提高表征学习可解释性,效果超越InfoGAN | IJCAI 2020...
- 朴素贝叶斯分类器(Navie Bayesian Classifier)中的几个要点(一)
- 在线编辑_水墨-在线 Markdown 编辑器
- python t t_Python ttable包_程序模块 - PyPI - Python中文网
- linux下mknod命令介绍
- 线程同步之 生产者消费者模型详解
- 有哪些问题应该得到解决?
- maven deploy到nexus报错:Return code is: 401, ReasonPhrase:Unauthorized
- win10装系统--笔记
- 钉钉、微信产品大PK,基因已经决定了结果
- Windows 7 64位下使用ADB驱动
- [职业规划]电子通信专业大学之路
- QPushButton中clicked消息参数一直返回false问题解决方法
- interlace video encode PAFF 和MBAFF
- Python暴力破解密码
- 代码的坏味道之二十一 :Refused Bequest(被拒绝的遗贈)
- Java jsp导出Excel打开报格式或扩展名错误
- python爬虫app步骤_Python爬虫抓取手机APP的传输数据,python爬虫抓取app
热门文章
- eeglab中文教程系列(14)-Working with ICA Components
- [CES 2018] 与联想、小蚁合作,谷歌发布VR180系列VR相机
- iOS应用开发入门(3)——点击button控制textview
- 华为自研编程语言「仓颉」火上热搜,已正式开启内测,成员辟谣:不是中文编程...
- 这家民办研究院太年轻,竟敢跟世界级选手“叫板”
- 不是所有图像都值16x16个词,清华与华为提出动态ViT
- 小米副总裁崔宝秋:智能手机是今天AI技术最大的平台,AIoT又让AI无处不在 | MEET 2021...
- 双非高校浙工大,一年2项研究上Nature,校友纷纷打Call:欠一个211名头
- 马斯克一作!Neuralink脑机接口细节公布,特殊材料防大脑损伤,专用芯片助技术落地...
- DOM渲染的详细过程 1