摘要: 这题花的时间还真是不少呀,而且还是参考大牛思路的题意:首先将字典保存,然后对应输入的message的每一个数字,输出频率最大的前缀,若没有,则输出MANUALLY主要运用到了俩方面的知识,栈还有字典树,栈的实现主要是保存未遍历过节点,方便回溯这里主要有俩个地方需要注意一下:其一,就是每个单词中字母的频率,比如:“hell,3”和“hello ,4”,则前缀相同时,h的频率为4+3=7其二,就是在利用栈进行回溯,首先将输入的串中对应的每一个数字调用find()函数查找最大频率的前缀,查找过程中,其实这里相当于深搜了,注意体会栈的思想#include<iostream>#include 阅读全文
posted @ 2011-05-15 10:41 枕边梦 阅读(1063) 评论(0) 推荐(0) 编辑
摘要: 额,跟hdu的1075很像,不过比那题简单多了,就是读入时有点麻烦,用到了一个函数具体看代码吧,这题没什么,不过我的内存开了太多了,不解……#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{ node *next[26]; int v; char str[15];}*tree,t;tree root;void insert(char *s,char *s1){ tree p=root,newnode; for(;*s1!='\0';s1++) { 阅读全文
posted @ 2011-05-14 12:56 枕边梦 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 这题目其实也不难,要有勇气去写这个代码,额,不过我第一次TLE了,我以为应该会超时的,太小看这个三个循环了记录下八个方向,本来想一边读入一遍查找的,省得记录结果,不过真的太慢了,所以只好开 一个二维的数组记录咯,插入的操作基本跟之前的一样,就是查询的时候用递归的方式,这是为了方向看,同时写代码也轻松了许多啦,比较直观#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{ node *next[26]; int id;}*tree,t;tree root;int px, 阅读全文
posted @ 2011-05-13 21:48 枕边梦 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 这题目真的彻底无语了,因为一个小错误,检查了半天,就是一个累加变量被我重复用了悲剧呀,怪不得老是输出一些莫名其妙的东西整体的话,这应该也算是基础的字典树吧,,就是读入数据有些技巧,嘿嘿,不过好像可以用map做哦前面做过一道题,就是在一个串的末尾的节点处,标记一下,而这道题,在一个串的末尾处将该串对应 的英文插入#include<string.h>#include<stdio.h>#include<stdlib.h>typedef struct node{ node* next[26]; char str[10];}*tree,t;tree root;char 阅读全文
posted @ 2011-05-12 22:05 枕边梦 阅读(250) 评论(0) 推荐(1) 编辑
摘要: 这道题,呵呵,题目那么长,说到底,是要计算一个数出现重复出现最多的次数题目说,一连串不重复的数,只需要一个所以同一个数重复一次就需要多一个呵呵,用map轻松解决了#include <iostream>#include <map>using namespace std; int n; int main(){ while (scanf("%d", &n) != EOF) { map<int, int> m; map<int, int>::iterator it; int i, a; for (i=0; i<n; i+ 阅读全文
posted @ 2011-05-12 20:26 枕边梦 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 呵呵,这道题目的话,也不难吧,就是在节点中添加了俩个标志因为想要一边添加一边判断是否出现过某个串是某个串的前缀,所以需要添加这俩个标志一个是v,用来表示是否有一个串在该节点结束,这主要是针对前面的串中出现过当前串的前缀;另一个是f,用来标志当前当一个串结束时,它是否存在下一个节点,主要针对当前串是之前出现过的串的前缀添加这俩个标志之后,基本没什么问题了,对了,初始化还是很严重的问题,额,因为有一个地方忘记初始化了,结果wa了一次额,还有一个蛮严重的,就是每一个case之后,要释放空间,不然内存使用过大了,虽然大牛说过,但我还是固执的提交了一次,悲剧#include<stdio.h> 阅读全文
posted @ 2011-05-12 19:58 枕边梦 阅读(1177) 评论(0) 推荐(0) 编辑
摘要: 并查集告一段落啦,先放下吧,今晚再做一下总结吧之后转入字典树的学习这道题目是比较基础的而且明显的字典树慢慢来吧题意比较明显,查找以某一个串为前缀的单词的数目,字典树还有一个名称,就是前缀树,所以就很明显了吧不过下面的代码用的是比较朴素的方法,root->next[],开的内存太大了,不过速度也相对快了root->cnt记录的是以从根节点到达该节点组成的串为前缀的单词的个数此题涉及到字典树的俩个基本操作,插入还有查找,代码很容易理解#include<stdio.h>#include<string.h>#include<stdlib.h>typede 阅读全文
posted @ 2011-05-12 14:12 枕边梦 阅读(946) 评论(3) 推荐(0) 编辑
摘要: 这题的话,跟食物链很相识,也是有三类,所以那个公式的话,还是一样的题意是要找出里面唯一的一个judge,judge的特别就是他没有固定属于哪一类,所以只能枚举每一个人当judge的情况了满足是唯一的judge的条件:1)当然就是枚举完所有人,只有一个的时候,那就是唯一的了;2)当此人是judge时,所有语句都成立,即不发生冲突在这里题目还要出输出,在第几行判断该人是judge的,这个也蛮好理解的,此人之前的所有人作为judge时出现矛盾的行数的最大值就是就是我们判断的依据,其实也可以这样想,判断当前面所以人不能成为judge的行数的最大,就是我们判断此人为judge的行数当不止一个人可以成为j 阅读全文
posted @ 2011-05-12 12:23 枕边梦 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 这题目让我郁闷了好久的说,首先就是离散化过程,区间大小和测试的例子相差太大,十分有必要进行离散化,这里就出现一个问题了,这道题目而已,离散化过程需要保持数据之间的相对大小吗?需要跟不需要相差很多吗?差别的话,当然很大啦,如果不需要保持数据的相对大小,那么,在映射过程中就可以直接将映射值放入运算了,而如果需要呢?这时,我们需要先将读入的数据保存,再排序,进入hash,或者使用map函数,这一过程就用了好多内存了和时间了为什么不需要保持数据的相对大小呢?因为我们用的是并查集,每个节点都有一个根节点,这里就是关键了,根节点是如何选的呢?呵呵,其实仔细想想,我们如何判断一个区间内1 的个数的奇偶性呢? 阅读全文
posted @ 2011-05-11 21:46 枕边梦 阅读(759) 评论(0) 推荐(0) 编辑
摘要: pku1731还有pku12561731是对stl中的next_permutation算法的基本应用具体用法:http://blog.csdn.net/aipb2008/archive/2008/03/29/2227490.aspx在标准库算法中,next_permutation应用在数列操作上比较广泛.这个函数可以计算一组数据的全排列.但是怎么用,原理如何,我做了简单的剖析.首先查看stl中相关信息.函数原型:template<class BidirectionalIterator> bool next_permutation( BidirectionalIterator _Fi 阅读全文
posted @ 2011-05-10 23:02 枕边梦 阅读(685) 评论(0) 推荐(0) 编辑