杭电 HDU 1247 ACMHat’s Words(trie树 或着STL)
来源:互联网 发布:知乎匿名的回答在哪里 编辑:程序博客网 时间:2024/06/06 11:01
Hat’s Words
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9620 Accepted Submission(s): 3438
Problem Description
A hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.
You are to find all the hat’s words in a dictionary.
You are to find all the hat’s words in a dictionary.
Input
Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 50,000 words.
Only one case.
Only one case.
Output
Your output should contain all the hat’s words, one per line, in alphabetical order.
Sample Input
aahathathatwordhzieeword
Sample Output
ahathatword
Author
戴帽子的
昨天晚上用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;}
TRIE树:
#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;}
0 0
- 杭电 HDU 1247 ACMHat’s Words(trie树 或着STL)
- HDU 1247 Hat’s Words(trie树+STL)
- hdu 1247 Hat’s Words Trie树
- HDU -- 1247 Hat’s Words (Trie 树)
- Hdu 1247 Hat's Words(Trie树)
- HDU 1247 Hat's words(Trie)
- hdu 1247 Hat’s Words(Trie)
- HDU 1247 Hat’s Words (Trie)
- HDU 1247 Hat’s Words && Trie(字典树)
- HDU ACM 1247-Hat’s Words-字典树(Trie)
- hdu 1247 Hat’s Words(Trie树入门)
- hdu 1247 Hat’s Words Trie树(+测试数据)
- HDU 1247-Hat’s Words(trie树)
- HDU-1247 Hat’s Words (Trie 字典树)
- 杭电hdu 1247 hat's words
- HDU 1247 Hat’s Words(字典树Trie)
- HDU 1247 Hat's words(字典树Trie)
- HDU 1247 Hat’s Words(字典树Trie)
- WCF回调中的死锁
- A20平台增加camera
- [LeetCode][Java] Decode Ways
- 【Android】使用 SwipeRefreshLayout 实现下拉刷新
- 前言
- 杭电 HDU 1247 ACMHat’s Words(trie树 或着STL)
- 使用testng listener实现测试用例失败重跑功能
- 什么是事务的传播特性?
- LeetCodeOJ_168_Excel Sheet Column Title
- 选择排序(selection sort)
- Linux关机命令详解
- PAT (Advanced Level) 1011. World Cup Betting (20) 求最大期望值,简单题
- SharePoint 2013 开发——获取用户配置文件属性内容(User Profile)
- 记大二结束