poj 2970 优先队列

先按di排序,(从小到大)。然后依次完成合同,若发现第i个合同无法在截止日期前完成,便从之前已经完成的任务中选一个aj最大的合同,付钱来使得这个合同尽快完成。

#include<cstring>

#include<cstdio>

#include<iostream>

#include<queue>

#include<algorithm>

using namespace std;

struct node

{

int q;

int w;

bool operator < (const node& t) const {

return q<t.q;

}

};

struct shsh

{

int q,w,e;

bool operator<(const shsh&kk) const{

return e<kk.e;

}

}yy[101005];

node k;

priority_queue<node> q;

int main()

{

int a;

//priority_queue<node> q;

while(~scanf("%d",&a))

{

while(!q.empty())

q.pop();

for(int i=0;i<a;i++)

{

scanf("%d%d%d",&yy[i].q,&yy[i].w,&yy[i].e);

}

long long ans=0;

double sum=0;

sort(yy,yy+a);

//for(int i=0;i<a;i++)

//{

//printf("%d %d %d\n",yy[i].q,yy[i].w,yy[i].e);

//}

for(int i=0;i<a;i++)

{

ans+=yy[i].w;

k.q=yy[i].q;

k.w=yy[i].w;

q.push(k);

while(ans>yy[i].e&&!q.empty())

{

node ee=q.top();

q.pop();

if(ee.w<ans-yy[i].e)

{

sum+=ee.w*1.0/ee.q;

ans-=ee.w;

}

else

{

ee.w-=ans-yy[i].e;

sum+=(ans-yy[i].e)*1.0/ee.q;

ans=yy[i].e;

q.push(ee);

}

}

}

printf("%.2f\n",sum);

}

return 0;

}//用G++提交,用%.2lf输出会错。。。

poj 2970 优先队列

时间: 2024-10-05 03:09:42

poj 2970 优先队列的相关文章

poj 2970 The lazy programmer 优先队列

题目链接:http://poj.org/problem?id=2970 先按deadline升序排 然后一件事一件事处理 这里需要[维护]已经过去的事情和当前这件事情中a值最大的项 这里就用到优先队列 时间不够的 就通过增大前面及当前的某件事的x值来补 这题卡精度 原来那种姿势不知道怎么就wa了 辛苦改成这种姿势以后 一开始在sum那里是整型过不了 然后改成double就过了 究其原因 应该也是[类型转换没有四舍五入] 导致精度损失 以后在除的地方 除了记得强制类型转换 还得考虑精度的问题 #i

POJ 2970 The lazy programmer(优先队列+贪心)

Language: Default The lazy programmer Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 1566   Accepted: 386 Description A new web-design studio, called SMART (Simply Masters of ART), employs two people. The first one is a web-designer and

【POJ 2970】The lazy programmer(优先队列+贪心)

这题范围不会超long long全用int存就行了 贪心的话,每次把一个任务加入到队列,如果不能在指定时间完成就到前面找a最小的一个任务补偿时间,当一个任务完成时间等于0的时候这个任务就不再放回队列 #include<cstdio> #include<queue> #include<algorithm> #include<cstring> using namespace std; //typedef long long LL; const int maxn

POJ 1442 优先队列 模板

/* poj 1442 题意:给定M个数,每次可以插入序列一个数:再给N个数,表示在插入第几个数时输出一个数, 第一次输出序列中最小的,第二次输出序列中第二小的……以此类推,直到输出N个数. 优先队列的使用: 本题思路是建立一个小顶堆p和一个大顶堆q, q保存前k个小的数,且保证p的值都比q的大, 最后输出q的顶 */ #include <iostream> #include <cstdio> #include <algorithm> #include <queu

POJ: 2413 ——优先队列——结构体cmp函数一级排序

我要翻译题目!!! /* A group of cows grabbed a truck and ventured on an  expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to run over a rock and puncture the truck's fuel tank. The truck now leaks one unit of fuel ev

poj 2431 优先队列,贪心

题意:从当前位置到目的地,给出初始油量和距离,给出一系列的加油站离终点的距离和可以加的油量,每走一个单位消耗一个单位油量,求要到达目的地最少要在几个加油站下车加油. 题解:既然是最少,那么尽可能在油消耗完的时候给加油,如果再走a米的路程中注定要加一次油,那么就选择这段路程油量最大的加油站下车 代码实现就是每经过一个加油站将这个加油站的油量存下来, 等到不得不下车加油的时候,就选择储存的这些数据中最大的那个(不一定是在油刚刚消耗完的时候,在那之前也行),并且选择完了以后将这个数据移出.直到到达目的

POJ -3253 优先队列 STL

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 29658   Accepted: 9643 Description Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000)

poj 1511 优先队列优化dijkstra *

题意:两遍最短路 链接:点我 注意结果用long long 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 1

Moo University - Financial Aid (poj 2010 优先队列 或者 二分)

Language: Default Moo University - Financial Aid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5551   Accepted: 1663 Description Bessie noted that although humans have many universities they can attend, cows have none. To remedy this p