***先对给的词,按首字母a-z排序,再二分查找***
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <stack> #include <queue> using namespace std; typedef long long LL; #define INF 0x3f3f3f3f #define N 100005 struct node { char s1[12]; char s2[12]; }stu[N]; int cmp(node a, node b) { return strcmp(a.s2, b.s2)<0; } void f(char s[], int n) { int l, r, mid, flag=0; l=0; r=n-1; mid=(l+r)/2; while(l<=r) { if(strcmp(s, stu[mid].s2)>0) { l=mid+1; } else if(strcmp(s, stu[mid].s2)<0) { r=mid-1; } else { printf("%s ", stu[mid].s1); flag=1; return ; } mid=(l+r)/2; } if(!flag) printf("eh "); return ; } int main() { char ch, str[12]; int i; memset(stu, 0, sizeof(stu)); for(i=0; ; i++) { scanf("%s%c", stu[i].s1, &ch); if(ch==' ') scanf("%s", stu[i].s2); else break; } sort(stu, stu+i, cmp); f(stu[i].s1, i); while(~scanf("%s", str)) { f(str, i); } return 0; }