Codefoces514C - Watto and Mechanism(Tire)
Posted overrate-wsj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codefoces514C - Watto and Mechanism(Tire)相关的知识,希望对你有一定的参考价值。
题意:
给n个模式串,m个匹配串,问是否有只与匹配串相差一个字符的模式串
思路:
直接上Tire,正常插入模式串
匹配时往该节点的儿子节点进行正常匹配,若能匹配成功,就输出YES
#include<iostream> #include<algorithm> #include<cstring> #include<string> using namespace std; const int maxn=1e6+10; int n,m; struct Tire{ int ch[maxn][3],val[maxn],cnt; void init() { cnt=1; memset(ch,0,sizeof(ch)); val[0]=0; } void insert(string s){ int u=0,n=s.length(); for(int i=0;i<n;i++){ int c=s[i]-‘a‘; if(!ch[u][c]) ch[u][c]=cnt++; u=ch[u][c]; } val[u]=cnt; } bool query(string s){ int u=0,n=s.length(),flag,k; for(int i=0;i<n;i++){ int c=s[i]-‘a‘; for(int j=0;j<=2;j++){ if(c==j||ch[u][j]==0) continue; int x=ch[u][j]; flag=1; for(int k=i+1;k<n;k++){ int y=s[k]-‘a‘; if(!ch[x][y]){ flag=0; break; } x=ch[x][y]; } if(flag&&val[x]) return true; } if(!ch[u][c]) return false; u=ch[u][c]; } return false; } }T; int main() { string temp; scanf("%d%d",&n,&m); T.init(); for(int i=1;i<=n;i++){ cin>>temp; T.insert(temp); } for(int i=1;i<=m;i++){ cin>>temp; if(T.query(temp)) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
以上是关于Codefoces514C - Watto and Mechanism(Tire)的主要内容,如果未能解决你的问题,请参考以下文章
[二分] Codefoces Anton and Making Potions
CodeForces 518C - Watto and Mechanism(模拟)
codefoces812C-Sagheer and Nubian Market心得
Codeforces 514C. Watto and Mechanism解题报告(字典树)