a ahat hat hatword hziee word
ahat hatword
昨天晚上用STL 1a渺杀 ,今天改用trie树 wa一上午 也是醉了!指针真的好烦人!
STL:
#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<string.h>
#include<cctype>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
int main()
{
string str;
map<string,int >cnt;
set<string>dict;
vector<string>buf;
while(cin>>str)
{
cnt[str]=1;
buf.push_back(str);
}
for(int i=0; i<buf.size(); i++)
{
string str2;
for(int j=0; j<buf[i].size()-1; j++)
{
str2+=buf[i][j];
if(cnt.count(str2)&&cnt.count(buf[i].substr(j+1,buf[i].size()-j-1)))
{
dict.insert(buf[i]);
break;
}
}
}
for(set<string>::iterator it=dict.begin(); it!=dict.end(); it++)
cout<<*it<<endl;
return 0;
}
#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<string.h>
#include<cctype>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
char cnt[50031][153];
struct Node
{
struct Node *next[26];
bool isword;
Node()
{
memset(next,NULL,sizeof(next));
isword=0;
}
}*root;
void insertWord(Node * node ,char *co)
{
int id;
node = root ;
while(*co)
{
id=*co-'a';
if(node->next[id]==NULL)
node->next[id]=new Node;
node = node->next[id];
co++;
}
node->isword=1;
}
bool searchWord(Node *node ,char *co)
{
int flag=0;
node = root;
while(*co)
{
int id=*co-'a';
if(node->next[id])
{
node=node->next[id];
if(node->isword)
{
flag=1;
Node *p=root;
char *pt=co;
pt++;
while(*pt)
{
int id=*pt-'a';
if(p->next[id])
p=p->next[id];
else
{
flag=0;
break;
}
pt++;
}
if(flag)
{
if(p->isword)
return 1;
}
}
}
co++;
}
return 0;
}
int main()
{
int t=0;
root=new Node;
while(~scanf("%s",cnt[t++]))
{
insertWord(root,cnt[t-1]);
}
for(int i=0; i<t; i++)
{
if(searchWord(root,cnt[i]))
{
printf("%s\n",cnt[i]);
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
杭电 HDU 1247 ACMHat’s Words(trie树 或着STL)
原文地址:http://blog.csdn.net/lsgqjh/article/details/46966621