ACM必做50题的解题-快速查找(B-Search,Hashandsoon).docVIP

ACM必做50题的解题-快速查找(B-Search,Hashandsoon).doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

kaiss + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档