STL
cyl纤云弄巧
To Be
展开
-
POJ 1338(set, 最小优先队列的简单使用)
题意:很简单,输出第n个丑数。最小优先队列: priority_queue,greater >pq;小的排在前边。set是容器,可以用count(x)查找x的个数。#include#include#include#include#include#include#define M 2000__int64 a[M];int coeff[3] =原创 2016-08-12 11:02:59 · 399 阅读 · 0 评论 -
ZOJ 3963 STL + 贪心
STL + 贪心题意: 有n个数字,它们可以再限制条件下可以建树:ai<aj,i<ja_i < a_j, i < j ,满足ai是aj 的父亲节点,一个父亲节点只能最多连两个儿子,现在要求满足条件下如何建树使得树的数量最少,输出每一个树 的大小和节点。思路: 这题考察STL和思维能力,若想使得树建的少,那么在插入的节点的时候要寻找比自己小的数字,按照贪心的思想一定要找第一个比自己小的数字原创 2017-08-30 21:59:58 · 358 阅读 · 0 评论 -
HDU 4398 STL + 贪心
STL + 贪心题意: ACM-ICPC赛事上有n,1~n道题,m个模板(1~m),只有对应的模板才能解出对应的题目,现在规则有点改变,当你没有某一道题的模板的时候能从场外求助获得此模板,但是用完之后你需要从m+1个模板中拿出来一个放在外边,总之就是要保持自己只有m 个模板,问最少可以求助几次?思路: 若想最少次,那么可以先考虑当模板不够的时候求助一次,然后再放出去一个模板,该放哪一个呢原创 2017-08-12 19:21:52 · 386 阅读 · 0 评论 -
POJ 3349 简单hash
题意: 给出n个雪花,每一个雪花由6个数字表示,现在问你n个雪花中有相同的吗?ps:雪花的6个数字给出的顺序不定,有的是正序有的是逆序 例如:1 2 3 4 5 6和 4 3 2 1 6 5表示同一个雪花。思路: 按照常规的思路,直接每一个找相同的话是会超时的。所以为了缩短时间复杂度,需要优化。一个特别好的思想就是同一类的放在一起找,这里可以使6个数字的和sum相同的放在一起,然后再判原创 2017-07-19 19:14:32 · 288 阅读 · 0 评论 -
POJ 2796 (前缀数组或者单调栈)
POJ 2796 题意: 给出一个数组,求出某一个数字和其所在的区间和的乘积最大值,输出最大值和左右区间的边界。其区间的定义是比这个数字大的区间。思路: 正常的思路是枚举求出每一个数字的区间,然后算出乘积。问题是如何减少复杂度。 这里可以用数组的前缀和。左右区间的话也可以加速比较。 比如左区间:a[i] <= a[l[i]-1],那么l[i] = l[l[i]-1];#in原创 2017-07-19 11:01:53 · 511 阅读 · 0 评论 -
SGU - 271 Book Pile (双向队列)
题意: 给出一个书名的序列从上到下,现在有两宗操作,1是add一个书名,2是最开始的k个 书名顺序翻转,求出操作结束之后的序列。思路: 看似很简单的题需要思考其数据结构的优化,方法是: 记录前k个书名,其余的记录在一个数组中就行了,我们选用vector保存其它书名。 用双向链表保存k个书名,那么链表的头尾可以控制认为是那个是正反顺序。具体看 代码。#include原创 2017-07-18 21:33:38 · 382 阅读 · 0 评论 -
POJ 2970 (优先队列)
题意: 给出n个项目,每一个项目三个属性ai,bi,di,bi是项目完成所需要的时间,di是 时间不能超过di,如果超过可以用钱来加快速度x的金钱可以使得bi = bi - ai * x。问 最少可以花费多少时间可以使得所有项目都按时完成。思路: 我们考虑每一个项目只要在时间限制下完成就行,但是如何操作呢? 首先:项目可以按照时间先后顺序完成,那么实际操作需要结构体排序。原创 2017-07-18 15:44:53 · 463 阅读 · 0 评论 -
POJ 3614(最小优先队列 + 贪心算法)
POJ 3614题意:有C头牛 L 种 防晒霜,C头牛有最大和最小的承受防晒范围,L种防晒是有自己的固定值和n瓶,求多少牛可以晒太阳。 说实话:此题优先队列是为贪心而准备的。 贪心?就是从最小的防晒霜开始找,找C头牛范围小的。 想要求出最多的牛晒太阳,当然是从最小的开始遍历。#include#include#include#inclu原创 2016-08-15 17:34:46 · 628 阅读 · 0 评论 -
POJ3253(STL)
题意:割木板,割木板的长度就是化的钱。比如你要8 8 5 的木板,最简单的方式是把21的木板割成13,8,花费21,再把13割成5,8,花费13,共计34,当然也可以先割成16,5的木板,花费21,再把16割两个8,花费16,总计37,现在就是问你花费最少的情况。#include#include#includeusing namespace std;int a[20005];i原创 2016-11-22 19:43:20 · 998 阅读 · 1 评论 -
POJ 1862 (贪心)
题意: 现在有很多粒子,两个碰撞之后形成一个粒子并且会减小质量,求最小值量。思路: 很简单,选出最大的两个碰撞质量减少最多。 不过也复习了一下优先队列与结构体的使用。#include<iostream>#include<algorithm>#include<queue>#include<cmath>#include<cstdio>using namespace std;cl原创 2016-12-07 20:31:59 · 292 阅读 · 0 评论 -
POJ 3087 (简单map + 模拟)
POJ 3087题意:给出洗牌的方式,问几次能洗出要求的牌。洗牌方式就是插入,很简单。用mapvisit 记录是否出现过。值得学习的就是这种想法,用map记录判断是否能洗出这种牌。#include#include#includeusing namespace std;int main(){ int t = 0,text;原创 2016-08-13 11:27:36 · 353 阅读 · 0 评论 -
POJ 2418 (简单map)
题意:输入字符串,按字典序输出字符串和它所占的百分比。map是一个容器,存入数据的时候默认字典序存入,只是不经常用所以很难控制输入输出。对于getline的解释: istream&getline ( istream &is , string &str, char delim );里面分别是:输入方式,输入目标,停止标记,来源:http://blog.sina.com.cn/s/原创 2016-08-13 10:47:15 · 563 阅读 · 0 评论 -
HDU 5437by cyl优先队列
HDU 5437题意: 有个人要过生日,有k个朋友来拜访,但是他家里实在是有点小,只能依次让朋友进门,有m个特定的时间,每次可以进入p个人,每一个朋友来会带礼物,价值为v。主人还是比较贪心的,他让朋友进入的条件是谁的礼物价值大谁先进,价值相等就按照拜访的顺序进入。思路: 可以看出是细节题,考察了对优先队列的掌握,问题在于要猜测出题人的思路,或者说是算法不错但是无法AC的时候,多思考是不是原创 2017-11-30 21:44:50 · 326 阅读 · 0 评论