您的位置:首页 > 其它

XDU Problem 1255 - 数列游戏

2013-12-22 00:41 148 查看
使用优先队列:

优先队列简介:

http://www.cplusplus.com/reference/stl/ 所有STL容器和STL
algorithm的所有函数。

优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则,不能重载“>”操作符。

使用优先队列时也需要声明头文件“#include <queue>”

优先队列是用heap完成的,支持O(log n)的入队和出队操作;

STL优先队列priority_queue<int,vector<int>,greater<int>
>中greater建立的顺序是从小到大排列,而less则是从大到小排列。另外,greater<int> >最后的应该是> >中间必须有一个空格,不然编译不通过。

操作函数:

Push():入队,即插入元素

Pop():出队,即删除元素

top():读取队尾元素(没有队列中的front()和back())

Empty():判断队列是否为空

Size():队列当前大小

自定义优先级
struct node
{
friend bool operator< (node n1, node n2)
{
return n1.priority < n2.priority;
}
int priority;
int value;
};


XDU Problem 1255 - 数列游戏
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int main()
{
//freopen("data.txt","r",stdin);
priority_queue<double,vector<double>,greater<double> > myqueue;
int cases;
cin>>cases;
while(cases--)
{
int num;
cin>>num;
for(int i=0;i<num;i++)
{
double temp;
cin>>temp;
myqueue.push(temp);
}
while(myqueue.size()>2)
{
double temp1=myqueue.top();myqueue.pop();
double temp2=myqueue.top();myqueue.pop();
myqueue.push(temp1+(temp2-temp1)/2);
}
double ans1=myqueue.top();myqueue.pop();
double ans2=myqueue.top();myqueue.pop();
printf("%.2f\n",ans1+(ans2-ans1)/2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: