您的位置:首页 > 其它

poj 2503 qsort+bsearch

2012-01-18 11:01 274 查看
题意:输入一个英文单词+空格+外文单词,要求输入外文单词找到对应的英文单词,如果找不到输出eh.
因为单词的输入量是100000,并且还要考虑单词匹配的问题,所以简单的算法应该会超时,本人没有去写。
通过这道题学到了sscanf(),qsort(),bsearch()的用法,感觉比较爽,这道题就是把单词进行快排,有序了以后,然后再二分查找从而节省时间。
#include<iostream>
#include<stdlib.h>
using namespace std;
struct str
{
char str1[11];//英文单词
char str2[11];//外文单词
};
int q_cmp(const void *a,const void *b)
{
return strcmp(((str*)a)->str2,((str*)b)->str2);
//因为要快排外文单词,所以指向str2.
}
int b_cmp(const void *a,const void *b)
{
return strcmp((char*)a,((str*)b)->str2);
//查找str2
}
int main()
{
str a[100005],*find;
char word[25];
int i=0,flag=0;
while(gets(word))
{
if(word[0]=='\0'&&!flag)
{
qsort(a,i,sizeof(str),q_cmp);//题目中输入一个空行之后进行快排
flag=1;//同时标记赋值为1
continue;
}
if(!flag)
{
sscanf(word,"%s %s",a[i].str1,a[i].str2);
//输入英文单词和外文单词,同时把单词分割赋值给结构体的str1,str2
i++;//下标加一
}
if(flag)
{
find=(str*)bsearch(word,a,i,sizeof(str),b_cmp);
//二分的查找空行之后的外文单词word,返回值是一个指向结构体类型的指针
if(find!=NULL) printf("%s\n",find->str1);//用指针指向输出英文单词
else printf("eh\n");
}
}
//system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: