小学生玩ACM----优先队列
思来想去,本人还是觉得,这个优先队列啊,不学不行,怎么说咧?虽说有时候我可以模仿它的功能,但是有的题目会坑的我大放血,况且多学会用一个小东东总不会伤身的撒,何况我是永举不垂的,哦耶,嘿嘿
优先队列嘛就是队列的一种,记得我写的栈和队列里面说了,普通队列没有q.top这个玩意儿吧?好吧,我当时好像是没加‘普通’这俩字,优先队列也就是只有返回的那个函数和普通队列不同,一个是top,一个是front,但是功能就不同了,优先队列是可以根据你自己设定的优先规则来选择性出队的呢,神马是我所说的选择性出队列?你蠢啊?这还不明白啊?去,自己那书本找语文老师去,所谓选择性就是有选择滴干活撒,优先队列的那种选择规则的写法目前我知道的是有三种咯,说不定下一种就是你首创的哦,亲~~嘿嘿
首先是我最喜欢的,就是定义的结构体里面直接写规则的
struct ssss
{
int x;
bool operator < (const ssss &a)const
{
return x>a.x;//越小越优先
}
}
定义这种的队列就直接写priority_queue<ssss> q;看清楚了,睁大你的钛合金屁眼看好,地球人都知道queue前面是个下划线,还有,别告诉我你看不清那个q后面的分号- -!
知道这个去优先级的规则是什么不?交保护费10快我就提前一秒告诉你-> .->!好吧,一秒过去了
可以这样理解,就是bool那一行里面的取了地址的a就是你操作的东东,你想的是把优先级a里面x值越小的设定优先级越高,这样这样...嘿嘿,就形成了一个伟大的结构体----上面的一个-.-!这样总算是理解了吧?好吧,我再扯,我就假设用来一个结构体元素a来装当前最优的元素,拿这当前优先级最高的和队列里面其他的一个一个比,如果比较的那些元素的x比a的x更小,那么return的就是true,这里不会不理解吧?嘿嘿,看来你还不本嘛,是的,不是true,应该是false -> .->!你可以自己这样想,当比较中返回的是ture的时候就说明当前跟他比较的元素比他在你设定的这个优先规则里面更优先那接着肿么办?擦,当然是长得丑的滚一边呗,难道这个最优先的位置还要留它一半?
唉,算理解了吧?不懂得给你一首歌的时间消化消化.........好了,一分钟过了,没消化?那算了,别逼我骂你蠢,我也是今天2小时前看的优先队列...
然后,不是还有两种长的丑的写法么?我是不打算说了列,觉得不实用,什么?你说我不会用?擦,那要是写出来了你要请我吃饭,还要把老婆分我一半。
struct cmp
{
bool operator ()(int &a,int &b)
{
return a>b;//越小越优先
}
}
定义这种队列就直接写priority_queue<int,vector<int>,cmp> q;里面第一个int是队列里面装的数据的类型,就像上面那个我的ssss一样(ssss可是我的最爱哦,你们不许用),cmp就是这个结构体了,也就是所谓的优先规则,这个我就不多说列,还要另外写一个结构体来装这些鸟不拉屎的东西,多麻烦啊,你想说这样可以定义多个,然后想用哪个用哪个是吧?喔喔喔,你好聪明,跟猪有的比了,这又区别哈?别逗我OK?
还有一个吧,这个是不用写这些东西的,就是系统给你送来点套餐,不过有方便也有缺陷,至少我认为是的吧,就是只能比较一层大小,不能分多钟情况来把数据搞死搞残,比如你帮我选老婆,我要身高高的,但是不许比我还高的,大爷,您别挑着高的就往我身上丢啊,等会儿你弄个2m1的母姚明来,老子打个啵儿还要点脚尖,哦,还是不行,要上个板凳,你说我哦累不累啊?但还是给你看看这个东东吧,就是定义。
priority_queue<int.vector<int>,greater<int> > q1;//越大约优先
priority_queue<int.vector<int>,less<int> > q2;//越小越优先
这就是两种定义,我想说的就是第一个int是数据类型,就是你可以q.(int);懂?别往队列里面乱插东西,还有啊,好到没?我放了好大一堆空格的啊,你那咪咪眼不会看不见吧- -!您老可真的不能逗我哈,好了,说说为什么,你不放空格试试就知道了呗,这个只可意会不可言传,哦耶!不放的话会编译错误,电脑会把两个‘<’当成别的东西用的,忘记叫什么了,就是位运算的东西,不过你别学我这么夸张,一个空格就好,我是怕您老看不清才多来点的!
丢了这么多没用的屁话,还是木有一个超级简单的例题来得实在,是不?好吧,我就把我的优先队列处女做奉献出来,是处女做而不是处女作是因为第一我是公的,第二这只我‘做’的题,不废话了,给您老瞧瞧!
说说题意,就是一个案例,最多输入60000次吧?嘿嘿,然后是区别了,要么就是一个PUT,这时再输入一个字符串和两个数字,第一个数字是没用的,输出的时候要跟着出来的,第二个就是用来比较啊,题意是越小越优先嘛,然后还可能是GET,这时你要输出队列里面最优先的东西了,不过要是队列为空那就输出那一句英语,我讨厌英语,别逼我写EMPTY QUEUE!这句话,好吧,我写了!最后还有一个要点,就是如果最优先的是两个元素或者更多,也就是输入的第二个数字相等且是队列里面最小的那些数据,那么就输出进来最早的那个最优元素,唉~你该不会不知道用一个k来标记吧?我会告诉你直接k++就好了?好吧,我又一次背叛了我的节操,那么,来看看例题吧!
Windows Message Queue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2576 Accepted Submission(s): 1008
PUT msg1 10 5
PUT msg2 10 4
GET
GET
GET
msg2 10
msg1 10
EMPTY QUEUE!
;
}
总结:总结个蛋蛋啊,大爷才刚看优先队列,只是有灵感领悟快一点、深一些咯,大神们别抽我,我还是个孩子,还很纯洁咯....
小学生玩ACM----优先队列的更多相关文章
- (转)女生应该找一个玩ACM的男生
1.强烈的事业心 将来,他也一定会有自己热爱的事业.而且,男人最性感的时刻之一,就是他专心致志做事的时候.所以,找一个机会在他全神贯注玩ACM的时候,从侧面好好观察他,你就会发现我说的话没错. 2.永 ...
- 【ACMER纷纷表示】女生应该找一个玩ACM的男生
1.强烈的事业心 将来,他也一定会有自己热爱的事业.而且,男人最性感的时刻之一,就是他专心致志做事的时候.所以,找一个机会在他全神贯注玩ACM的时候,从侧面好好观察他,你就会发现我说的话没错.2.永不 ...
- 小学生玩ACM----广搜
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- 小学生玩ACM----深搜
Square Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- ACM中使用 JAVA v2. 1
ACM中使用JAVA v2.1 严明超 (Blog:mingchaoyan.blogbus.com Email:mingchaoyan@gmail.com) 0.前 言 文前声明:本文只谈java用于 ...
- ACM失败之路
校赛打完,已过四月,该是准备背起行囊,踏上考研之路了,自然,得先阔别一下ACM了,想起这几年ACM路,感慨颇多,不得不一诉心肠,与大家分享一下我的ACM历程,如果有人能从此文获取一些益处,那我就很欣慰 ...
- 【转载】ACM总结
转自亲学长的总结 声明:本文是写给弱校ACM新手的一点总结,受自身水平和眼界所限,难免会有一些个人主观色彩,希望大牛指正 感谢@Wackysoft .@哇晴天 . @ 一切皆有可能1 的指教,现根据这 ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- ACM感悟
声明:本文是写给弱校ACM新手的一点总结,受自身水平和眼界所限,难免会有一些个人主观色彩,希望大牛指正 感谢@Wackysoft .@哇晴天 . @ 一切皆有可能1 的指教,现根据这些建议,文章已进行 ...
随机推荐
- 计算时间间隔的js
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- linux中vi保存文件时的“Can't open file for writing”
今天在ubuntu 13.04环境下,使用vi新建一个文件,编辑保存时提示“Can't open file for writing”. 分析: 出现这个错误的原因可能有两个: 一是当前用户的权限不足: ...
- bzoj3884: 上帝与集合的正确用法 欧拉降幂公式
欧拉降幂公式:http://blog.csdn.net/acdreamers/article/details/8236942 糖教题解处:http://blog.csdn.net/skywalkert ...
- poj1247 bjfu1239水题
其实就是读题啦,读懂题很简单,就是问一个数组,存不存在一个点,按这个点切成两半,这两半的数字的和是一样的.不多说了,上代码 /* * Author : ben */ #include <cstd ...
- HTML 表单提交 的简单代码
<form action="check.php" method="post"> 用户名:<input type="text" ...
- QT-【转】2D编程
Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕上和绘图·设备上进行绘制,主要基于QPainter.QPainterDevice和QPainterEngine这3个类. 1.QPainter ...
- QT多线程笔记
1.QT多线程涉及到主线程和子线程之间交互大量数据的时候,使用QThread并不方便,因为run()函数本身不能接受任何参数,因此只能通过信号和槽的交互来获取数据,如果只是单方面简单交互数据还过得去, ...
- VS20xx下项目开发目录管理方法
在VS20XX之后项目管理使用解决方案(solution)管理一个大的开发工程中多个项目(Project). 以下目录配置与工程名称无关,适用于一般的工程组织过程. 对于一般的生成可执行程序的工程,使 ...
- linux网络编程笔记——UDP
目前这部分代码会出现阻塞问题,暂时尚未解决 #include "udp.h" #include <stdio.h> #include <string.h> ...
- POJ No.3680 Intervals
2016-06-01 22:01:39 题目链接: POJ No.3680 Intervals 题目大意: 给定N个带权区间,最多可以重复选一个点M次,求出一种选法使得所得权最大 解法: 费用流 建模 ...