Description
Input
Output
Sample Input
dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay
Sample Output
cat eh loops
分析:字符串哈希。用map也可水过。
Code1(hash):
#include <algorithm> #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <vector> #include <queue> #include <cmath> #include <map> #include <set> #define eps 1e-7 #define LL long long #define pb push_back #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) using namespace std; const int MOD=100007; struct node{ char s1[15],s2[15]; int next; }pos[MOD]; int head[MOD]; char str1[15],str2[15]; int GetKey(int len){ int ans=0; for(int i=0;i<len;i++){ ans=(ans*26+(str2[i]-'a'))%MOD; } return ans; } int main() { int cnt=0; memset(head,-1,sizeof(head)); while(str1[0]=getchar()){ if(str1[0]=='\n') break; scanf("%s %s",&str1[1],str2); int tmp=GetKey(strlen(str2)); strcpy(pos[cnt].s1,str1); strcpy(pos[cnt].s2,str2); pos[cnt].next=head[tmp]; head[tmp]=cnt++; getchar(); } while(scanf("%s",str2)!=EOF){ int tmp=GetKey(strlen(str2)); bool flag=false; for(int i=head[tmp];i!=-1;i=pos[i].next){ if(strcmp(str2,pos[i].s2)==0){ flag=true; printf("%s\n",pos[i].s1); break; } } if(!flag) printf("eh\n"); } return 0; }
Code2(map):
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<map> using namespace std; char s1[15],s2[15]; int main() { map<string,string>data; map<string,bool>mark; while(1){ s1[0]=getchar(); if(s1[0]=='\n')break; scanf("%s",s1+1); scanf("%s",s2); mark[s2]=true; data[s2]=s1; getchar(); } while(cin>>s1){ if(mark[s1])printf("%s\n",data[s1].c_str()); else printf("eh\n"); } return 0; }