Gym 100345G Pulp Fiction 贪心
2016-09-19 10:40
330 查看
这题很简单,就是对于每本书,在下一次出现前能否写完,能写完就写,写不完就在下一次idea出现之后判断,这样不停的判断,把中断的书全都加到队列里去,到最后没书写的时候把队列里的书拿出来继续写,由于要求的是天数总和最小,所以需要用到优先队列。
题目传送门
代码:
#include<bits/stdc++.h> #define MEM(a,x) memset(a,x,sizeof(a)); #define MEMINF(a) memset(a,0x3f,sizeof(a)); using namespace std; typedef long long LL; const int MAXN=1e5+10; const int INF=0x3f3f3f3f; const int MOD=1000000007; int n; struct node { LL r,p; bool operator < (const node &a) const { return r<a.r; } }nod[MAXN]; priority_queue<LL,vector<LL>,greater<LL> >q; int main() { freopen("pulp.in","r",stdin); freopen("pulp.out","w",stdout); cin>>n; for (int i=1; i<=n; ++i) { scanf("%lld %lld",&nod[i].r,&nod[i].p); nod[i].r++; } LL ans=0; LL t; sort(nod+1,nod+n+1); for (int i=1; i<=n; ++i) { q.push(nod[i].p); t=nod[i].r; if (i<n) while (!q.empty()) { if (t>=nod[i+1].r) break; LL u=q.top(); q.pop(); if (t+u-1>=nod[i+1].r) { u-=nod[i+1].r-t; t=nod[i+1].r; q.push(u); } else { t=t+u; u=0; ans+=t-1; } } } while(!q.empty()) { LL u=q.top(); q.pop(); t+=u; ans+=t-1; } cout<<ans<<endl; }
相关文章推荐
- Problem G. Pulp Fiction-Gym 100345G-贪心
- GYM 101149 J.Panoramic Photography(贪心)
- 【贪心】【堆】Gym - 101485A - Assigning Workstations
- GYM 100883 D.Card Game(二分+贪心)
- CodeFroces gym 100781 A.Adjoin the Networks(贪心)
- CodeForces Gym 100803A 模拟,贪心
- Cooking Time Gym - 101498F 贪心
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
- 2007-2008 Winter Petrozavodsk Camp, Andrew Stankevich Contest 30-G - Pulp Fiction-贪心+优先队列
- GYM 100030 G.Procrastination(贪心)
- GYM 101102 L.Starry Night(贪心+dfs)
- Gym - 100187A A - Potion of Immortality —— 贪心
- GYM 101142 F.Folding(贪心)
- gym 100430 G【贪心+map瞎搞】
- Codeforces Gym 100269E Energy Tycoon 贪心
- HDU 5695 ——Gym Class——————【贪心思想,拓扑排序】
- Gym 101606E 【贪心+sort】
- Codeforces Gym 100203E E - bits-Equalizer 贪心
- Gym - 215177C 玩游戏 贪心
- GYM 100030 I.Prohibition(贪心)