hdu 1075 map函数的应用
What Are You Talking AboutTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/204800 K (Java/Others)
Total Submission(s): 7616 Accepted Submission(s): 2364
Problem DescriptionInputOutputSample InputSample Outputhello, i'm from mars.i like earth!HintHuge input, scanf is recommended.
题意:
start 开始
输入 明文 和对应密文
end 结束
start 开始 输入密文串 输出对应明文 如果没有匹配则输出直接输出 end结束 只有一组测试数据
map函数的应用 也可以用字典树 但是我的一直RE 倒霉 希望那个大侠帮我找找原因
#include<stdio.h>#include<string>#include<iostream>#include<string.h>#include<map>using namespace std;int main(){int i;map<string,string>mp;string a,b,c;char str[4000];cin>>a;while(cin>>a){if(a=="END") break;cin>>b;mp[b]=a;}cin>>a;getchar();getline(cin,c);while(c!="END") //读入一行 包括空格 和gets一样{a="";for(i=0;i<c.size();i++){if(c[i]<'a'||c[i]>'z'){ if(mp[a]=="") //如果找不到就是空的 cout<<a; else cout<<mp[a]; a=""; printf("%c",c[i]);}else a+=c[i];//注意是加哦}printf("\n");getline(cin,c);}return 0;}/*学到的知识1:string s 这种类型不能用scanf print gets strcmp进行操作2;cin必须有iostream 头文件3: 找不到对应串 map返回为空串 mp[a]==""4: 最后样例结果看着好像不对似的 但是要是单独提取出来 和样例输出事一样的只要一样就OK了 */RE代码 希望大家帮帮修改下
:
#include<stdio.h>#include<malloc.h>#include<string.h>char str[5000][50],s[200000];struct haha{ int id; struct haha *next[26];}*root;int count;struct haha *creat(){ int i; struct haha *p; p=(struct haha *)malloc(sizeof(struct haha)); p->id=-1; for(i=0;i<26;i++) p->next[i]=NULL; return p;}void update(char *s){ int i,pos,d; struct haha *p; p=root; d=strlen(s); for(i=0;i<d;i++) { pos=s[i]-'a'; if(p->next[pos]==NULL) { p->next[pos]=creat(); p=p->next[pos]; } else p=p->next[pos]; } p->id=count;}int query(char *s,int d){ int pos,i; struct haha *p; p=root; for(i=0;i<d;i++) { pos=s[i]-'a'; if(p->next[pos]!=NULL) p=p->next[pos]; else return -1; } if(p->id!=-1) return p->id; else return -1;}int main(){ char s1[20]="START",s2[20]="END",ss[3000]; int d,k,i,flag=0,j; count=1; root=creat(); // while(scanf("%s",s)) // { // if(strcmp(s,s1)==0) break; // } while(scanf("%s",str[count])) { if(strcmp(str[count],s2)==0) break; scanf("%s",s); update(s); count++; } // while(scanf("%s",s)) //{ // if(strcmp(s,s1)==0) break; //} scanf("%s",s); getchar(); /* while(1) { gets(s); if(strlen(s)==3&&strcmp(s,"END")==0) break; d=strlen(s); j=0; memset(ss,'\0',sizeof(ss)); for(i=0;i<d;i++) { if(s[i]>='a'&&s[i]<='z') ss[j++]=s[i]; else { ss[j]='\0'; if(strlen(ss)!=0) { k=query(ss,strlen(ss)); if(k!=-1) printf("%s",str[k]); else printf("%s",ss); } printf("%c",s[i]); j=0; memset(ss,'\0',sizeof(ss)); } } if(d>=1&&s[d-1]>='a'&&s[d-1]<='z') {ss[j]='\0';j=0;k=query(ss,strlen(ss));printf("%s",str[k]);} printf("\n"); */ int re=0; char x; while(x=getchar()) { if((x<='z'&&x>='a')||(x<='Z'&&x>='A')) { ss[re++]=x; } else { ss[re]='\0'; if( !strcmp("END",ss) ) break; k=query(ss,strlen(ss)); if(k!=-1) printf("%s",str[k]); else printf("%s",ss); printf("%c",x ); re=0; } } return 0;}