码迷,mamicode.com
首页 > 其他好文 > 详细

The lazy programmer POJ - 2970

时间:2021-06-19 18:48:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:错误   ogr   ace   lse   ons   long   operator   main   http   

原题链接
考察:贪心
错误思路:
??对于每个任务,按d,a顺序排序,如果不能按时完成就付钱使得按时完成.
思路:
??不一定要压当前任务的时间,我们可以压花费更小的任务时间,使得超时任务按时完成.

Code

#include <iostream> 
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
const int N = 100010;
typedef long long LL;
struct Node{
	int a,b,d;
}node[N];
struct cmp2{
	bool operator()(Node n,Node m){
		if(m.d==n.d) return m.a>n.a;
		return n.d<m.d;
	}
};
struct cmp{
	bool operator()(Node n,Node m){
		return n.a<m.a;
	}
};
int n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int a,b,d;
		scanf("%d%d%d",&a,&b,&d);
		node[i].a = a,node[i].b = b,node[i].d = d;
	}
	double ans = 0;
	sort(node+1,node+n+1,cmp2());
	priority_queue<Node,vector<Node>,cmp> q;
	LL now = 0;
	for(int i=1;i<=n;i++)
	{
		now+=(LL)node[i].b;
		q.push(node[i]);
		while(q.size()&&now>node[i].d)
		{
			Node it = q.top();
			q.pop();
			if(now-node[i].d>=it.b)
			{
				ans+=1.0*it.b/it.a;
				now-=it.b;
			}else{
				ans+=(now-node[i].d)*1.0/it.a;
				it.b-=now-node[i].d;
				now-=now-node[i].d;
				q.push(it);
			}
		}
	}
	printf("%.2lf\n",ans);
	return 0;
}

The lazy programmer POJ - 2970

标签:错误   ogr   ace   lse   ons   long   operator   main   http   

原文地址:https://www.cnblogs.com/newblg/p/14901422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!