http://poj.org/problem?id=2503
一道二分查找题
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> using namespace std; struct node { char a[20]; char b[20]; }str[100005]; int cmp(const void *x,const void *y) { node *p1 = (node *)x,*p2 = (node *)y; return strcmp(p1->b,p2->b); } char c[100005][20],d[100]; int main() { int i,j,p,q,high,low; char *ptr; i = j = 0; do { gets(d); if(strcmp(d,"\0") == 0) break; sscanf(d,"%[^ ]",str[i].a); sscanf(d,"%*s %s",str[i++].b); }while(1); qsort(str,i,sizeof(node),cmp); while(1) { gets(c[j]); if(strcmp(c[j++],"\0")==0) break; high = i; low = 0; while(low <= high) { q = (high+low)/2; if(!strcmp(c[j-1],str[q].b)) { printf("%s\n",str[q].a); break; } else if(strcmp(c[j-1],str[q].b) < 0) high = q-1; else low = q+1; } if(low > high) printf("eh\n"); } return 0; }