POJ-2503 Babelfish 二分+快排

来源:互联网 发布:java 网站源码 编辑:程序博客网 时间:2024/04/29 20:53

题目的意思:就像查找一本字典,根据输入的条目和要查询的单词,给出查询结果(每个单词长度不超过10)

刚开始用STL里面的map去做,结果华丽丽的TLE了,用了快排和二分去做

#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;const int MAX=100001;typedef struct{char a[11];char b[11];}Entry;Entry entry[MAX];int i=0;int cmp(const void*a,const void*b){return strcmp((*(Entry *)a).b, (*(Entry *)b).b); }int search(char c[]){int low=0;int high=i-1;int mid,temp;while(low<=high){mid=(low+high)/2;temp=strcmp(entry[mid].b,c);if(temp==0){return mid;}else{if(temp==-1)  {  low=mid+1;  }    else  {  high=mid-1;  }}}return -1;}int main(){char s[25];int count=1;while(gets(s)){if(s[0]=='\0'){break;}sscanf(s,"%s%s",entry[i].a,entry[i].b);i++;}qsort(entry,i,sizeof(Entry),cmp);while(gets(s)){count=search(s);if(count==-1){cout<<"eh"<<endl;}else{cout<<entry[count].a<<endl;}}return 0;}


0 0
原创粉丝点击