标签:
http://ac.jobdu.com/problem.php?pid=1069
方法2:利用折半查找,时间复杂度O(nlogn (排序) + m*logn);
//方法1: #include<iostream> #include<cstdio> #include<cstring> using namespace std; struct info{ char number[1010]; char name[1010]; char sex[5]; int age; }buf[1010]; int main() { int n,m,i,j; while(scanf("%d",&n)!=EOF){ memset(buf,0,sizeof(buf)); for(i=1;i<=n;i++){ scanf("%s %s %s %d",buf[i].number,buf[i].name,buf[i].sex,&buf[i].age); } scanf("%d",&m); char x[1010]; for(i=1;i<=m;i++){ scanf("%s",x); for(j=1;j<=n;j++){ if(strcmp(x,buf[j].number)==0){ printf("%s %s %s %d\n",buf[j].number,buf[j].name,buf[j].sex,buf[j].age); break; } } if(j==n+1){ printf("No Answer!\n"); } } } return 0; } //方法2 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct Student{ char no[100]; char name[100]; int age; char sex[5]; bool operator < (const Student & A) const{ return strcmp(no,A.no)<0; } }buf[1000]; int main() { int n,i; while(scanf("%d",&n)!=EOF){ for(i=0;i<n;i++){ scanf("%s%s%s%d",buf[i].no,buf[i].name,buf[i].sex,&buf[i].age); } sort(buf,buf+n); int t; scanf("%d",&t); while(t--!=0){ int ans=-1; char x[30]; scanf("%s",x); int top=n-1,base=0; while(top>=base){ int mid=(top+base)/2; int tmp=strcmp(buf[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 %s %d\n",buf[ans].no,buf[ans].name,buf[ans].sex,buf[ans].age); } } return 0; }
标签:
原文地址:http://blog.csdn.net/lanjiangzhou/article/details/42417739