Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 22593 | Accepted: 9698 |
Description
Input
Output
Sample Input
dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay
Sample Output
cat eh loops
#include<iostream> using namespace std; int i,j,num; struct set { char fir[15],lat[15]; }; set dictionary[100010]; void cxbin() { char temp[30]; while(1) { gets(temp); if(temp[0]=='\n' || temp[0]=='\0') break; int len=strlen(temp); for(i=0;i<len;i++) { if(temp[i]==' ') { dictionary[num].fir[i]='\0'; break; } dictionary[num].fir[i]=temp[i]; } for(i++,j=0;i<len;j++,i++) dictionary[num].lat[j]=temp[i]; dictionary[num].lat[++j]='\0'; num++; } } int cmp(const void *p1,const void *p2) { return strcmp((*(set *)p1).lat,(*(set *)p2).lat)>0?1:-1; } int search(char *a) { int max=num,min=0,mid; while(max>=min) { mid=(max+min)/2; if(strcmp(dictionary[mid].lat,a)>0) { max=mid-1; } else if(strcmp(dictionary[mid].lat,a)<0) { min=mid+1; } else { return mid; } } return -1; } int main() { cxbin(); qsort(dictionary,num,sizeof(dictionary[0]),cmp); char word[12]; while(scanf("%s",word)==1) { int sign=search(word); if(sign==-1) { printf("eh\n"); } else printf("%s\n",dictionary[sign].fir); } return 0; }
原来查找函数还可以用bsearch来查找。。。
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<string.h> using namespace std; int i,j,num; struct set { char fir[15],lat[15]; }; set dictionary[100010]; void cxbin() { char temp[30]; while(1) { gets(temp); if(temp[0]=='\n' || temp[0]=='\0') break; int len=strlen(temp); for(i=0;i<len;i++) { if(temp[i]==' ') { dictionary[num].fir[i]='\0'; break; } dictionary[num].fir[i]=temp[i]; } for(i++,j=0;i<len;j++,i++) dictionary[num].lat[j]=temp[i]; dictionary[num].lat[++j]='\0'; num++; } } int cmp(const void *p1,const void *p2) { return strcmp((*(set *)p1).lat,(*(set *)p2).lat)>0?1:-1; } int cmp1(const void *p1,const void *p2) { return strcmp((char *)p1,(*(set *)p2).lat); } int main() { cxbin(); qsort(dictionary,num,sizeof(dictionary[0]),cmp); char word[15]; while(scanf("%s",word)==1) { set *sign; sign=(set *)bsearch(word,dictionary,num,sizeof(dictionary[0]),cmp1); if(sign==NULL) { printf("eh\n"); } else printf("%s\n",sign->fir); } return 0; }