题目居然复制不了(QAQ)
分析
TrieJSK已经2比较详细了,就不再单独写博客了,此题相较于Trie模板有一点不同,此题要求比较前缀却没有规定前面是后面的前缀还是后面是前面的前缀,所以我们要先将所有串添加到Trie中,然后再全部查询,如果出现一次直接输出“Bug!”然后跳出循环
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int trie[243333][30],cnt,sum[300000];
string s[300000];
void add(string t){
int n=t.length();
int i,j,k,p=0;
for(i=0;i<n;i++){
if(!trie[p][t[i]-'a']){
trie[p][t[i]-'a']=++cnt;
}
p=trie[p][t[i]-'a'];
}
sum[p]++;
}
int fid(string t){
int n=t.length();
int i,j,k,p=0;
for(i=0;i<n;i++){
if(sum[p])return 1;
p=trie[p][t[i]-'a'];
}
return 0;
}
int main()
{ int n,m,i,j,k;
cin>>n;
for(i=1;i<=n;i++){
cin>>s[i];
add(s[i]);
}
for(i=1;i<=n;i++)
if(fid(s[i])){
puts("Bug!");
return 0;
}
puts("Good Luck!");
return 0;
}