随笔分类 - ACM_数据结构
摘要:题目链接:http://poj.org/problem?id=3253思路分析:题目与哈夫曼编码原理相同,使用优先队列与贪心思想;读入数据在优先队列中,弹出两个数计算它们的和,再压入队列中;代码如下:#include #include using namespace std;struct cmp{ ...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1200思路分析:从数据来看,该题目使用线性时间算法,可见子串的比较是不可能的;使用hash可以在常数时间内查找,可以常数时间内判重,可以再线性时间内解决问题;问题关键在与Hash函数的选择,使得子串之间的Hash值不同;由于NC的提示,...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1035思路分析:1、使用哈希表存储字典2、对待查找的word在字典中查找,查找成功输出查找成功信息3、若查找不成功,对word增、删、改处理,然后在字典中查询,若查找成功则记录处理后单词在字典中的次序4、对次序排序再输出注:对word处...
阅读全文
摘要:题目链接:http://poj.org/problem?id=3295思路分析:判断逻辑表达式是否为永真式问题。根据该表达式的特点,逻辑词在逻辑变量前,类似于后缀表达式求值问题。算法中使用两个栈,从表达式的后边开始处理表达式中每个字符;若为逻辑变量,使其入栈SR,否则从栈SR中弹出两个逻辑变量,进行...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2833思路分析:由于数据量较大,超出存储范围,使用不能使用数组存储数据在进行排序。考虑维护一个最大堆与最小堆,依次读取数据,记录数据中的n1个最大数字与n2个最小数据,所有数据累计和减去堆中数据即可。注意使用记录n2个最大数据要使用最小...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1442思路分析:维护一个最小堆与最大堆,最大堆中存储最小的K个数,其余存储在最小堆中;使用Treap构造名次树,查询第K大数即可;代码如下(堆的用法):#include#includeusing namespace std;struct...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1936思路分析:字符串子序列查找问题,设置两个指针,一个指向子序列,另一个指向待查找的序列,查找个字符串一次即可判断。算法时间复杂度O(N)。代码如下:#include #include using namespace std;#def...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1068思路分析:对栈的模拟,将栈中元素视为广义表,如(((()()()))),可以看做 LS =,对于可以配对的序列,如 看做一个元素,其 W 值为1;同理,为一个元素,其W值为1,看做一个元素, 其W值为 与 、的W的值的和加 1,...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2255思路分析:根据先序遍历(如DBACEGF)可以找出根结点(D),其后为左右子树;根据中序遍历(如ABCDEFG),已知根结点(D),可以知道在根结点左边的为左子树结点(ABC),右边为右子树结点(EFG);可以求出左子树与右子树结...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1002思路分析:先对输入字符进行处理,转换为标准形式;插入标准形式的电话号码到查找树中,若有相同号码计数器增加1,再中序遍历查找树。代码如下:#include #include #include struct TreeNode;type...
阅读全文
摘要:题目描述:http://poj.org/problem?id=2823思路分析:求某个区间的最大与最小值,可以使用两个单调队列,由于需要在队列前删除元素和在队列后增加元素,所以考虑使用双端队列;在双端队列中记录元素的下标,另外,双端队列为单调队列,满足单调非递增或单调非递减,则队列第一个元素为区间最...
阅读全文
摘要:题目链接:http://poj.org/problem?id=3250思路分析:题目要求求每头牛看见的牛的数量之和,即求每头牛被看见的次数和;现在要求如何求出每头牛被看见的次数?考虑到对于某头特定的牛来说,看见它的牛一定在它的左边,另外其高度应该大于该牛的高度,所以只需要计算在其左边并高度大于它的牛...
阅读全文

浙公网安备 33010602011771号