您的位置:首页 > 其它

hdu 1247 Hat’s Words

2015-06-19 01:30 330 查看
虽然已经很晚了,但我还是要写下这篇博客,做这题大概用了三个小时吧~

ac之后我唯一的感觉就是真是毙了狗了,是哪个混蛋出的这个让人蛋疼的题

以为是一道很简单的字典树的题,结果呢......卧槽啊!和以往的输入输出不一样啊!要ctrl+c再重定义才能检查结果啊!这样也就算了啊!可是ctrl+c对于cout和printf的影响不一样啊!cout不能完整的在文件上输出啊!然而我却不知道啊!网上的代码都是c语言的输出啊!发现不了问题所在啊!文件里的结果一直不对啊!其实代码是对的啊!检查了一遍又一遍还是不对啊!以为树建错了啊!以为指针指错了啊!其实并没有错啊!坑爹啊!坑爹啊!坑爹啊!

#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 50000+5
using namespace std;
string x,y,z;
string rem[maxn];
int cnt=0;
struct stu
{
string m;
stu *a[27];
int flag;
stu()
{
for(int i=0;i<27;i++) a[i]=NULL;
flag=0;
}
};
stu *p=new stu();
void build(stu *root,int cnt)
{
int b=x[cnt]-'a';
if(root->a[b]==NULL)
{
root->a[b]=new stu();
}
root=root->a[b];
if(cnt==x.size()-1)
{
root->flag++;
root->m=x;
return;
}
else build(root,cnt+1);
}
bool find(stu *root,int f,string str)
{
if(f==str.size())
{
if(root->flag==1) return true;
else return false;
}
else if(root->a[str[f]-'a']==NULL) return false;
else return find(root->a[str[f]-'a'],f+1,str);
}
int main()
{
//	freopen("out1.txt","w",stdout);
while(cin>>x)
{
rem[cnt++]=x;
build(p,0);
}
for(int i=0;i<cnt;i++)
{
for(int j=1;j<=rem[i].size()-1;j++)
{
y=rem[i].substr(0,j);
z=rem[i].substr(j,rem[i].size()-j);
if(find(p,0,y)&&find(p,0,z))
{
cout<<rem[i]<<endl;
break;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: