POJ2503解题报告
来源:互联网 发布:关闭21端口 编辑:程序博客网 时间:2024/05/07 15:31
好久没写解题报告了因为做的题太水没学到什么,今天终于学到了新的知识,用快排加二分查找解决庞大的查找任务,对与新手来说刚开始接触这题应该没想到用二分查找的,我自己也是,直接写了一个简单的查找程序让他输出对应的english但是一放上去就超时了,后来要百度看别人的代码想想才知道原来这题考的就是要高效的查找,用普通查找办法也有一样的输出结果不过就是超时咯,不但学会了二分,还学了几个很有用的函数sscanf和bsearch,用bsearch就不用自己去写二分查找了,直接用就行了,
至于这题的转行判断也琢磨死人,最后才有了解决办法。。。辛苦学习写出的AC代码:
#include<iostream>
#include<string>
#include<stdio.h> //包含sscanf函数
#include<stdlib.h> //包含bsearch函数
using namespace std;
struct Dic
{
char engl[15];
char fore[15];
}dic[100005];
int cmp(const void *a,const void *b)
{
return strcmp(((Dic*)a)->fore,((Dic*)b)->fore);
}
int main()
{
Dic *p,key;
char str[30];
int i=0;
while(cin.getline(str,30),strlen(str)!=0)//为了想一个能输入字符串和回车的函数想了好久,之前用cin一直不把回车当回事
{
sscanf(str,"%s%s",dic[i].engl,dic[i].fore); //这个函数的功能是将空格前的一段字符付给engl,后段付给fore
i++;
}
qsort(dic,i,sizeof(Dic),cmp);
while(scanf("%s",key.fore)!=EOF)
{
p=(Dic*)bsearch(&key,dic,i,sizeof(Dic),cmp); //用besearch实现二分查找的功能
if(p)
cout<<p->engl<<endl;
else
cout<<"eh"<<endl;
}
return 0;
}
用快排加二分查找做这道题的基础是懂会用快排函数和二分查找就行了对于新手来说,对于bsearch自己也是刚百度学到的。
- POJ2503解题报告
- POJ2503
- poj2503
- poj2503
- POJ2503
- poj2503
- poj2503
- poj2503
- poj2503
- poj2503
- poj2503
- poj2503
- poj2503
- poj2503
- poj2503
- poj2503
- POJ2503
- 解题报告
- 谁成了谁的过客,谁成了谁的永远!
- 这个房子很好看,呵呵~
- Flex与采用Https协议的服务器通讯
- 今天收到了Ubuntu9.10的光盘,难为情啊!真是浪费别人资源了。下次不申请了。
- perl 关于时间,日期的模块
- POJ2503解题报告
- JAVA书籍400本,精心收
- java基础知识
- webBrowser打开本地HTML,却启动其他程序
- ASP.NET 备份恢复 Sql Server 数据库
- c#实现16进制和字符串之间转换的代码
- 忆龙2009:亚信联创大事记
- Jsp,Servlet,JavaBean
- Asp.net中防止用户多次登录的方法