POJ 2970 The lazy programmer 优先队列
2014-01-06 00:53
453 查看
--------------
--------------
const double EPS = 1e-7; const int maxn=150000; int dcmp(double a,double b){ if (abs(a-b)<EPS) return 0; if (a>b) return 1; else return -1; } struct Dat{ int a,b,d; double c; bool operator<(const Dat& rhs)const{ return a<rhs.a; } Dat(){c=0;} Dat(int x,int y,int z){ a=x;b=y;d=z;c=0; } }; bool cmp(const Dat& a,const Dat& b){ return a.d<b.d; } priority_queue<Dat>que; int n; Dat a[maxn]; int main(){ while (~scanf("%d",&n)){ while (!que.empty()) que.pop(); for (int i=0;i<n;i++){ scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].d); a[i].c=0; } sort(a,a+n,cmp); double sum=0; double T=0; for (int i=0;i<n;i++){ que.push(a[i]); T+=(double)a[i].b; while (dcmp(T,(double)a[i].d)>0){ Dat pr=que.top(); que.pop(); double x=(T-(double)a[i].d)/(double)pr.a; if (dcmp((double)pr.b/(double)pr.a,pr.c+x)>0){ pr.c+=x; sum+=x; T-=x*(double)pr.a; que.push(pr); break; } else { x=(double)pr.b/(double)pr.a-pr.c; pr.c+=x; sum+=x; T-=x*(double)pr.a; } } } printf("%0.2f\n",sum); } return 0; }
--------------
相关文章推荐
- POJ 2970 The lazy programmer 优先队列
- POJ 2970 The lazy programmer(贪心+单调优先队列)
- POJ2970 The Lazy Programmer
- 【POJ 2970】The lazy programmer(优先队列+贪心)
- POJ-2970-The lazy programmer
- POJ 2970 The lazy programmer(优先队列+贪心)
- poj 2970 The lazy programmer 优先队列
- POJ 2970 The lazy programmer(优先队列+贪心)
- Poj 2970 The lazy programmer(贪心)
- 【POJ】2786-Keep the Customer Satisfied(贪心 + 优先队列,姿势不对就要跪)
- POJ 2227 The Wedding Juicer (dfs+优先队列,传说中的floodfill)
- POJ 2442 Sequence 优先队列
- SPOJ 417 The lazy programmer(贪心)
- Poj 1442 Black Box(优先队列水题)
- POJ3253-- Fence Repair【优先队列】
- 【优先队列:支持动态插入,寻找中位数】:poj3784,Running Median
- 【简单贪心+优先队列】POJ - 1862 - Stripies
- HDU 4006 The kth great number(优先队列、堆实现)
- poj 1258 最小生成树 prim+优先队列
- [置顶] POJ 2431 EXPEDITION 非 优先队列的 c++ 做法