九度OJ 08浙大真题之《魔咒词典》

来源:互联网 发布:网络翻唱女歌手名字 编辑:程序博客网 时间:2024/04/28 15:44

题目地址:http://ac.jobdu.com/problem.php?pid=1029


#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXS 100002typedef struct E{char name[22];char op[82];}E;E dict1[MAXS],dict2[MAXS];int cmp1(const void *a,const void *b){E *aa=(E *)a,*bb=(E *)b;return strcmp(aa->name,bb->name);}int cmp2(const void *a,const void *b){E *aa=(E *)a,*bb=(E *)b;return strcmp(aa->op,bb->op);}int suc,flag;int main(){int N,l,count,i,j,k,mid,temp;char now[105];for(i=1;i<=MAXS;i++){gets(now);l=strlen(now);while(now[l]=='\0'||now[l]=='\n')l--;now[++l]='\0';if(now[0]=='@')break;for(j=0;now[j]!=']';j++);now[++j]='\0';strcpy(dict1[i].name,now);strcpy(dict1[i].op,now+j+1);dict2[i]=dict1[i];}for(count=i+1;dict1[count].name[0]=='\0';count--);qsort(dict1,++count,sizeof(dict1[0]),cmp1);qsort(dict2,count,sizeof(dict2[0]),cmp2);scanf("%d",&N);getchar();while(N--){suc=flag=0;gets(now);if(now[0]=='['){i=1;j=count-1;while(i<=j){mid=(i+j)>>1;if((temp=strcmp(now,dict1[mid].name))==0){suc=mid;flag=1;break;}if(temp>0)i=mid+1;else j=mid-1;}if(flag)puts(dict1[suc].op);else puts("what?");}else {i=1;j=count-1;while(i<=j){mid=(i+j)>>1;if((temp=strcmp(now,dict2[mid].op))==0){strcpy(now,dict2[mid].name);l=strlen(now)-1;for(k=1;k<l;k++)now[k-1]=now[k];now[--k]='\0';suc=mid;flag=1;break;}if(temp>0)i=mid+1;else j=mid-1;}if(flag)puts(now);else puts("what?");}}return 0;}