Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 32988 | Accepted: 14189 |
Description
Input
Output
Sample Input
dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay
Sample Output
cat eh loops
Hint
Source
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct node{ int flag ; node *next[27] ; } *head; node *getnode() { node *p = new node ; int i ; for(i = 0 ; i < 27 ; i++) p->next[i] = NULL ; p->flag = -1 ; return p ; } void gettree(node *p,char *s,int m) { int i , k , l = strlen(s); for(i = 0 ; i < l ; i++) { k = s[i] - 'a' ; if( p->next[k] == NULL ) p->next[k] = getnode(); p = p->next[k] ; } p->flag = m ; } int f(node *p,char *s) { int i , k , l = strlen(s) ; for(i = 0 ; i < l ; i++) { k = s[i] - 'a' ; if( p->next[k] == NULL ) return -1 ; p = p->next[k] ; } return p->flag; } char s1[110000][12] , s2[110000][12] , s[30] ; int main() { int i = 0 , j , l , k ; head = getnode(); while(1) { gets(s); if(s[0] == '\0') break; sscanf(s,"%s %s", s1[i], s2[i]); gettree(head,s2[i],i); i++ ; } while(gets(s)!=NULL) { if(s[0] == '\0') break; k = f(head,s); if(k == -1) printf("eh\n"); else printf("%s\n", s1[k]); } return 0; }