题目:Password Leakage


#include <iostream>
#include <string.h>
#include <stdio.h>
#include <queue>using namespace std;char S[1000010];
char keyword[51];
char str[51];
char T[51];class Trie
{public:int count;Trie *fail;Trie *next[26];Trie(){count=0;fail=NULL;memset(next,NULL,sizeof(next));}
};Trie *root;queue<Trie*> Q;void Insert(char *S,int msk)
{int len=strlen(S);Trie *p=root;for(int i=0; i<len; i++){int id=S[i]-'a';if(p->next[id]==NULL)p->next[id]=new Trie();p=p->next[id];}p->count|=msk;
}int Delete(Trie *T)
{if(T==NULL) return 0;for(int i=0; i<26; i++)if(T->next[i]!=NULL)Delete(T->next[i]);delete T;return 0;
}void Build_AC()
{Q.push(root);root->fail=NULL;while(!Q.empty()){Trie *p=NULL;Trie *tmp=Q.front();Q.pop();for(int i=0; i<26; i++){if(tmp->next[i]){if(tmp==root) tmp->next[i]->fail=root;else{p=tmp->fail;while(p){if(p->next[i]){tmp->next[i]->fail=p->next[i];break;}p=p->fail;}if(p==NULL) tmp->next[i]->fail=root;}Q.push(tmp->next[i]);}}}
}int Query()
{Trie *p=root;int index,result=0;int len=strlen(S);for(int i=0; i<len; i++){index=S[i]-'a';while(p->next[index]==NULL&&p!=root) p=p->fail;p=p->next[index];if(p==NULL) p=root;Trie *temp=p;while(temp!=root&&temp->count!=-1){result|=temp->count;temp->count=-1;temp=temp->fail;}}return result;
}int Bin(int msk)
{int t=0;while(msk){if(msk&1) t++;msk>>=1;}return t;
}int main()
{int n,m,x,y;char tmp;while(~scanf("%s",S)){root=new Trie();x=y=-1;scanf("%d",&m);scanf("%s",str);for(int i=0; i<m; i++){if(str[i]=='1'){if(x==-1) x=i;else      y=i;}}scanf("%d",&n);for(int i=0;i<n;i++){scanf("%s",keyword);if(x!=-1){tmp=keyword[x];for(int j=0;j<26;j++){keyword[x]='a'+j;Insert(keyword,1<<i);}keyword[x]=tmp;}if(y!=-1){for(int j=0;j<26;j++){keyword[y]='a'+j;Insert(keyword,1<<i);}}Insert(keyword,1<<i);}Build_AC();printf("%d\n",Bin(Query()));Delete(root);}return 0;
}



NEFU704(AC自动机+状态压缩)相关推荐

  1. 洛谷 P-4045 密码(AC自动机+状态压缩+数位DP+乱搞)

    洛谷 P-4045 密码 记AC的第一道黑题! 题意:已知一段密码包含了一些字符串,然后求满足条件的密码有多少个,数量小于42时还得全部输出 思路: 一开始WA了两个点,不知道WA的什么,索性把读入的 ...

  2. HDU 3341 Lost's revenge(AC自动机+状态压缩DP)

    Description 给出N个优良的基因段,每段长度小于等于10,只含有AGCT四种碱基. 现给一段基因片段S,|S|<=40.对其重排列后,最多能含有多少个优良基因,基因段可以有公共部分 I ...

  3. 【bzoj1195】[HNOI2006]最短母串 AC自动机+状态压缩+BFS最短路

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825226.html 题目描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串 ...

  4. 【HDU2825】Wireless Password,AC自动机+状态压缩DP

    传送门 写在前面:依旧有毒的HDU,读题半天看不懂啊,感觉自动机的精通遥遥无期啊! 思路: 题意--给定m个给定的串(可能相同),要求组建一个给定长度为n的新串,要求新串中至少包含k个给定的串(序号重 ...

  5. ZOJ3545——AC自动机+状态dp

    这题目是去年大连regional的题目,当时比赛的时候已经看出是道自动机+dp的题目了,但是无奈当时自己的自动机基础太弱了,被虐了一顿.今天再来做这道题目,感觉还好,思路还是蛮清晰的,但是却看出了长时 ...

  6. hdu 2825 Wireless Password AC自动机+状态DP

    时间卡得紧,写成递推可以做一些优化 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cs ...

  7. 转自kuangbin的AC自动机(赛前最后一博)

    有了KMP和Trie的基础,就可以学习神奇的AC自动机了.AC自动机其实就是在Trie树上实现KMP,可以完成多模式串的匹配.           AC自动机 其实 就是创建了一个状态的转移图,思想很 ...

  8. AC自动机+状压dp hdu2825 Wireless Password

    传送门:点击打开链接 题意:有个密码长度为n,现在有m个魔力单词,要求密码中魔力单词的种类数>=k,问这种密码的种类数. 思路:和之前一样,我们会想到AC自动机去压缩状态,把状态给简化.然后我们 ...

  9. POJ 3691 DNA repair AC自动机 + DP

    题意:给你只包含'A','G','T','C'四个字母的n个模板串和1个文本串,问你文本串改变多少个字符就可以使得文本串中没有一个模板串 解题思路: 我们可以知道  dp[i][j] 为文本串到 第i ...

最新文章

  1. TensorFlow 安装protoc
  2. 灵魂拷问,上 Kubernetes 有什么业务价值?
  3. 如何写出《黄焖鸡米饭是怎么火起来的》这样的文章
  4. blender使用_DigiVita使用Blender教女孩编码
  5. 石头剪子布蜥蜴史波克python_C++字符串——石头剪刀布
  6. L2-007 家庭房产 (25分)
  7. 【JAVA】java中CyclicBarrier的使用方法,实例解说
  8. jvm之可达性分析算法
  9. tas5424_TAS5424ATDKDQ1
  10. VS2013使用技巧汇总(有图)
  11. 亮屏流程 - 安卓R
  12. word2vec 的个人理解
  13. OpenGL-入门-BMP像素图glDrawPixels
  14. NBA勇士陷入苦境 威金斯不保证这季会归队
  15. 在EXCEL中如何给一列数据加上双引号
  16. 超高清晰电影寻觅及下载技巧汇集
  17. 美专家起诉欧洲对撞机可能撞出黑洞毁灭地球
  18. Android拼图滑块验证码控件
  19. 网络黑客攻击呈现三大特点 形成利益链条
  20. 【MATLAB】基于曼宁公式求解复式断面水位-流量关系曲线

热门文章

  1. war包发布找不见路径 weblogic getResource 与getRealPath
  2. ThreadLocal是救火队长
  3. request获得请求参数
  4. SasSHRM中基于shiro的认证授权:需求分析
  5. Eureka的高可用
  6. 模拟实现顺序表ArrayList2(三级)
  7. c语言程序设计了解,C语言程序设计
  8. ReentrantReadWriteLock源码解析
  9. Java中头指针和头结点_. 2 . 【严题集 2.1① 描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)。...
  10. python办公代码_[Python] 自动化办公 docx操作Word基础代码