HDU 1880(魔咒词典)解题纠错

以下代码来自http://topic.csdn.net/u/20110308/20/19cacccd-8c0f-4d08-a902-43fd07f2c087.html

#include #include #include #define max 100005 typedef struct Node { char mo[25]; char yu[85]; }Node; Node mag1[max]; Node mag2[max]; int cmp1(const void *a,const void *b) { Node *c=(Node *)a; Node *d=(Node *)b; return strcmp(c->mo,d->mo); } int cmp2(const void *a,const void *b) { Node *c=(Node *)a; Node *d=(Node *)b; return strcmp(c->yu,d->yu); } int search(char str[],int len,int tag) //采用二分查找,返回查找到的元素在队列中的位置 { int be=0,en=len-1,t; while(be<=en) { t=(be+en)/2; if(tag==0) { if(strcmp(str,mag1[t].mo)<0) en=t-1; else if(strcmp(str,mag1[t].mo)>0) be=t+1; else return t; } else { if(strcmp(str,mag2[t].yu)<0) en=t-1; else if(strcmp(str,mag2[t].yu)>0) be=t+1; else return t; } } return -1; } int main() { char str[120]; int count=0,f; int i; while(gets(str)) { if(strcmp(str,"@END@")==0) break; for(i=0;i=0) printf("%s/n",mag1[f].yu); else printf("what?/n"); } else { f=search(str,count,1); if(f>=0) printf("%s/n",mag2[f].mo); else printf("what?/n"); } } return 0; }

 

WA的原因是在输出“魔咒”时没有去除括号。以下是修改后AC的代码:

#include #include #include #define max 100005 typedef struct Node { char mo[25]; char yu[85]; }Node; Node mag1[max]; Node mag2[max]; int cmp1(const void *a,const void *b) { Node *c=(Node *)a; Node *d=(Node *)b; return strcmp(c->mo,d->mo); } int cmp2(const void *a,const void *b) { Node *c=(Node *)a; Node *d=(Node *)b; return strcmp(c->yu,d->yu); } int search(char str[],int len,int tag) //采用二分查找,返回查找到的元素在队列中的位置 { int be=0,en=len-1,t; while(be<=en) { t=(be+en)/2; if(tag==0) { if(strcmp(str,mag1[t].mo)<0) en=t-1; else if(strcmp(str,mag1[t].mo)>0) be=t+1; else return t; } else { if(strcmp(str,mag2[t].yu)<0) en=t-1; else if(strcmp(str,mag2[t].yu)>0) be=t+1; else return t; } } return -1; } int main() { char str[120]; int count=0,f; int i; while(gets(str)) { if(strcmp(str,"@END@")==0) break; for(i=0;i=0) printf("%s/n",mag1[f].yu); else printf("what?/n"); } else { f=search(str,count,1); if(f>=0) { strcpy(str, mag2[f].mo+1); str[strlen(str)-1] = '/0'; printf("%s/n",str); } else printf("what?/n"); } } return 0; }

你可能感兴趣的:(ACM解题)