- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM必做50题的解题-快速查找(B-Search,Hashandsoon)
ACM必做50题的解题-快速查找 (B-Search, Hash and so on).txt你不能让所有人满意,因为不是所有的人都是人成功人士是—在牛B的路上,一路勃起你以为我会眼睁睁看着你去送死吗?我会闭上眼睛的POJ 2503 Babelfish
题目大意很简单,就是给你字典的对应信息,然后给你查询条件要求你输出字典查询结果,如果字符串没有在字典中则输出eh。
恩,学到了一个新的函数bsearch(),可以进行二分查找。先对字典使用qsort排序然后再使用bsearch()查找字符串即可。
还学到了一个输入函数sscanf(),可以从一个字符串中读取内容,格式如下
sscanf (string str, string format [, string var1...])
#include stdio.h
#include stdlib.h
#include string.h
typedef struct
{
char en[11];
char fn[11];
}dict;
dict a[100001];
/* 定义qsort比较函数 */
int q_cmp(const void * a,const void *b)
{
return strcmp(((dict*)a)-fn, ((dict*)b)-fn);
}
/* 定义bsearch比较函数 */
int b_cmp(const void* a, const void* b)
{
return strcmp((char*)a, ((dict*)b)-fn);
}
int main()
{
char str[30];
int i, sign;
dict *p;
i = 0;
/* 查询标记记为未开始 */
sign = 1;
/* 读取字符串直到文件结束 */
while(gets(str))
{
/* 遇到空行则开始排序字典 */
if (str[0] == \0)
{
/* 查询标记记为开始 */
sign = 0;
qsort(a, i, sizeof(dict), q_cmp);
continue;
}
/* 查询未开始时读取字典信息 */
if (sign)
{
/* 使用sscanf从str中读取查询要求 */
sscanf(str, %s %s, a[i].en, a[i].fn);
i++;
}
/* 查询开始时进行查询 */
else
{
/* 二分查找指定字符串 */
p = (dict*) bsearch(str, a, i, sizeof(dict), b_cmp);
/* 找到则输出结果 */
if (p)
{
puts(p-en);
}
/* 找不到输出eh */
else
{
puts(eh);
}
}
}
//system(pause);
return 0;
}
POJ 2513 Colored Sticks 欧拉通路+并查集+trie树
这道题大意是:已知有n根木棒,每个木棒有两种颜色表示两端,问:能不能将所有的木棒连接成一条直线(连接处颜色相同)。
可以考虑无向图的欧拉通路问题:将每种颜色看成图中的一个节点,木棒看作连接节点的边,于是判断两点:
1,每种颜色(节点)的度
2,是否为连通图
首先,每种颜色的度可以通过每条木棒的两端颜色的累积得到,问题是,每种颜色都是字符串,怎么关联每种颜色和度呢?
最容易想到的是Hash,这肯定是可行的。例如degree [ hash(red) ]=5。表示颜色为红色的度为5。
但是,既然提示用trie树来做,那么trie树的节点的数据域就可以保存每种颜色的id(相当于分配的hash值,可以通过一个全局变量自增产生),这样经过将每种颜色字符串插入到tree中以后,通过trie树的search操作就能高效的获取每种颜色对应的id,没插入一种颜色,为其产生一个id,只需要注意相同颜色插入时的处理即可。
其次,判断无向图是否连通可以使用并查集来判定:经过n-1各union操作后,所有节点都在一个集合(树形结构表示集合的话,即所有节点的父节点(集合代表)都一样)。由于每种颜色是由字符串来标示的,每个集合保存颜色对应的唯一id。
通过上面两个步骤的判定,就可以得出结果。
#include iostream
#include cstring
using namespace std;
const int max_size=500001;
文档评论(0)