HDU1075 What Are You Talking About
2016-01-26 10:08
344 查看
水题一道,可以用字典树也可以用map做。都很简单;
字典树版
map版
字典树版
#include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> #include<math.h> #include<queue> using namespace std; #define nn 1001000 char s[nn]; struct Trie { int ch[nn][26]; int val[nn]; char c[nn][100]; int sz; int se; void init() { sz=1; se=1; memset(ch[0],0,sizeof(ch[0])); } int idx(char c) {return c-'a';} void insert(char *s,char *v) { int u=0,n=strlen(s); for(int i=0;i<n;i++) { int c=idx(s[i]); if(!ch[u][c]) { memset(ch[sz],0,sizeof(ch[sz])); val[sz]=0; ch[u][c]=sz++; } u=ch[u][c]; } val[u]=se; strcpy(c[se],v); se++; } void find(char *s) { int u,n=strlen(s); //printf("s==%s\n",s); int ans=1; for(int i=0;i<n;i++) { int c=idx(s[i]); if(!ch[u][c]) {ans=0;break;} u=ch[u][c]; } if(ans && val[u]) printf("%s",c[val[u]]); else printf("%s",s); //return val[u]; } }t; int main() { char s1[100],s2[100]; while(~scanf("%s",s1)) { if(strcmp(s1,"START")==0) continue; if(strcmp(s1,"END")==0) break; scanf("%s",s2); t.insert(s2,s1); } char s[nn]; getchar(); while(gets(s)) { int i=0,j=0; int n=strlen(s); while(i<n && ((s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z'))) s1[j++]=s[i++]; s1[j]='\0'; if(strcmp(s1,"START")==0) continue; if(strcmp(s1,"END")==0) break; for(i=0;i<n;) { j=0; while(i<n && ((s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z'))) s1[j++]=s[i++]; s1[j]='\0'; //printf(" s1==%s\n",s1); t.find(s1); while(i<n) { if((s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z')) break; printf("%c",s[i++]); } } printf("\n"); } return 0; }
map版
#include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> #include<math.h> #include<queue> #include<map> using namespace std; #define nn 1001000 int main() { map<string,string>q; q.clear(); string s1,s2; while(cin>>s1) { if(s1=="START") continue; if(s1=="END") break; cin>>s2; q[s2]=s1; } char s[nn]; getchar(); while(gets(s)) { int i=0; s1=""; int n=strlen(s); while(i<n && ((s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z'))) s1+=s[i++]; if(s1=="START") continue; if(s1=="END") break; s1=""; for(i=0;i<n;) { while(i<n && ((s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z'))) s1+=s[i++]; if(q.find(s1)==q.end()) { cout<<s1; } else cout<<q[s1]; s1=""; while(i<n) { if((s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z')) break; printf("%c",s[i++]); } } //cout<<endl; printf("\n"); } return 0; }
相关文章推荐
- 双向一对多外联关系-XML配置属性
- Java Swing界面编程(28)---复选框:JCheckBox
- HttpClient使用详解
- 将人脸数据库生成为.txt文件
- MyEclipse10破解教程(亲测可用)
- ArcGIS教程:插值方法对比
- IP?IPR?
- 安卓--第一天--安卓简介与SDK
- Java模拟POST表单提交HttpClient操作
- 流式大数据处理的三种框架:Storm,Spark和Samza
- 剖析 Linux hypervisor
- Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计
- Java模拟POST表单提交HttpClient操作
- mindmup-editabletable-编辑table的使用
- Java将流转化为文件
- javascript检测对象中是否存在某个属性
- struts标签错误The Struts dispatcher cannot be found.
- hadoop 2.6.0 JvmPauseMonitor源代码分析
- Java上传图片代码事例
- 代理模式