二分查找,将时间复杂度由O(n*m)降为O(n*logn+m*logn)。
再次注意,字符串的输入输出,。。找了半天的bug。。。。
#include <stdio.h>
#include<algorithm>
#include <string.h>
using namespace std;
struct student{
char no[5];
char name[20];
int age;
bool operator < (const student &a) const{
return strcmp(no,a.no)<0;
}
}stu[1001];
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
int i;
for(i=0;i<n;i++)
scanf("%s%s%d",stu[i].no,stu[i].name,&stu[i].age);
sort(stu,stu+n);
char x[5];
int ans=-1;
int top=n-1,base=0;
scanf("%s",x);
while(top>=base){
int mid=(base+top)/2;
int tmp=strcmp(stu[mid].no,x);
if(tmp==0){
ans=mid;
break;
}
else if(tmp>0)
top=mid-1;
else
base=mid+1;
}
if(ans==-1)
printf("no answer\n");
else
printf("%s %s %d\n",stu[ans].no,stu[ans].name,stu[ans].age);
}
return 0;
}