poj2503 2010.2.24

来源:互联网 发布:浙江网络诈骗立案标准 编辑:程序博客网 时间:2024/05/21 22:37

poj2503 2010.2.24

1.  学会了用函数库里的qsort

 

 

2.  终于写成功了二分

 

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAXN 100000+10#define MAXL 20struct node{char front[MAXL],back[MAXL];} num[MAXN];char goal[MAXL]={0};int n,key;int cmp(const void *a,const void *b){return strcmp(((struct node*)a)->back,((struct node *)b)->back);}int search(int,int);int main(){char temp;int c1,c2;n=0;while (1){scanf("%c",&temp);if (temp=='\n') break;c1=0;while (temp!=' '){num[n].front[c1]=temp;c1++;scanf("%c",&temp);}num[n].front[c1]='\0';c2=0;scanf("%c",&temp);while (temp!='\n'){num[n].back[c2]=temp;c2++;scanf("%c",&temp);}num[n].back[c2]='\0';n++;}qsort(num,n,sizeof(num[0]),cmp);//int i;//for(i=0;i<n;i++)//printf("%s  %s\n",num[i].front,num[i].back);while (scanf("%s",goal)!=EOF){key=-1;int pp=search(0,n-1);if (pp>=0)printf("%s\n",num[pp].front);else printf("eh\n");}return 0;}int search(int l,int r){if (l<=r){int mid=(l+r)/2;if (strcmp(goal,num[l].back)==0){//printf("return l   %d\n",l);key=l;}elseif (strcmp(goal,num[r].back)==0){//printf("return r  %d\n",r);key=r;}elseif (strcmp(goal,num[mid].back)==0){//printf("return r  %d\n",r);key=mid;}elseif (strcmp(goal,num[mid].back)>0)search(mid+1,r);else search(l,mid-1);}return key;}

0 0