思路:trie树。
代码:
#include<bits/stdc++.h>
using namespace std;
#define read(x) scanf("%d",&x)
#define maxn 3000
int n;
char a[maxn+5];
vector<int> Trie[2];
int cnt=0;
int f[maxn*maxn+5];
void dfs(int x) {
if(f[x]>1) printf("%d\n",f[x]);
if(Trie[0][x]) dfs(Trie[0][x]);
if(Trie[1][x]) dfs(Trie[1][x]);
}
int main() {
read(n);scanf("%s",a+1);
Trie[0].push_back(0),Trie[1].push_back(0);
for(int i=1;i<=n;i++) {
int p=0;
for(int j=i;j<=n;j++) {
if(a[j]=='1') {
if(Trie[1][p]) p=Trie[1][p];
else p=Trie[1][p]=++cnt,Trie[0].push_back(0),Trie[1].push_back(0);
f[p]++;
}
else {
if(Trie[0][p]) p=Trie[0][p];
else p=Trie[0][p]=++cnt,Trie[0].push_back(0),Trie[1].push_back(0);
f[p]++;
}
}
}
dfs(0);
return 0;
}
本文详细解析了BJWC2010竞赛中的“外星联络”题目,采用trie树数据结构进行高效字符串匹配和计数,通过代码实现展示了如何构建和遍历trie树来解决复杂字符串问题。
355

被折叠的 条评论
为什么被折叠?



