您的位置:首页 > 其它

【字典树】hdu 1075 What Are You Talking About

2015-10-30 20:04 393 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1075

查字典的感觉,字典树或者map容器都可以,附2个版本

/*
hdu 1075
方法一:map容器,自带查找O(logn)
方法二:字典树 串的快速检索
注意字符串的读入!
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<algorithm>
#include<sstream>
#define eps 1e-9
#define pi acos(-1)
#define INF 0x7fffffff
#define inf -INF
#define MM 12900
#define N 50
using namespace std;
typedef long long ll;
const int _max = 5e4 + 10;
map<string,string>mp;

string s,a,b;

int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif // ONLINE_JUDGE
cin>>s;
while(cin>>a&&a!="END"){
cin>>b;
mp[b] = a;
}
cin>>s;//cout<<s<<endl;
getchar();
a="";
while(getline(cin,s)&&s!="END"){
for(int i = 0; i < s.length();++ i){
if(islower(s[i])){
a+=s[i];
}
else {
if(mp.find(a)!=mp.end()) cout<<mp[a];
else cout<<a;
a="";
printf("%c",s[i]);
}
}
cout<<endl;
}
return 0;
}

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<algorithm>
#include<sstream>
#define eps 1e-9
#define pi acos(-1)
#define INF 0x7fffffff
#define inf -INF
#define MM 12900
#define N 50
using namespace std;
typedef long long ll;
const int _max = 5e4 + 10;

char ans[20];

struct Trie{
Trie *next[26];
int cnt;//从根节点到该节点组成的串的个数
char str[20];
}*root;

void insert(char *s,char *a){
Trie *p = root,*pnew;
for(int i = 0; i < strlen(s);++ i){
int x = s[i]-'a';
if(p->next[x]==NULL){
pnew = new Trie;
pnew->cnt = 0;
// pnew->str = NULL;
for(int j = 0; j < 26; ++ j)
pnew->next[j] = NULL;
p->next[x] = pnew;
}
p=p->next[x];
}
p->cnt = 1;
strcpy(p->str,a);
}

int search(char *s){
Trie *p = root;
for(int i = 0; i < strlen(s);++ i){
int x = s[i]-'a';
if(p->next[x]==NULL) return 0;
p=p->next[x];
}
if(p->cnt==1){
strcpy(ans,p->str);
return 1;
}
return 0;
}

void init(){
root = new Trie;
root->cnt = 0;
for (int i = 0;i < 26;i ++)
root->next[i] = NULL;
}

int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif // ONLINE_JUDGE
init();
string s;cin>>s;char a[20],b[20];
while(scanf("%s",a)==1&&strcmp(a,"END")){
scanf("%s",b);
insert(b,a);
}
cin>>s;getchar();
memset(a,0,sizeof(a));int k = 0;
while(getline(cin,s)&&s!="END"){
for(int i = 0; i < s.length(); ++ i){
if(islower(s[i])){
a[k++] = s[i];
}
else{
a[k] = '\0';
if(search(a)) printf("%s",ans);
else printf("%s",a);
k = 0;
printf("%c",s[i]);
}
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字典树 map