Canada Cup 2016 D. Contest Balloons

来源:互联网 发布:js switch case用法 编辑:程序博客网 时间:2024/06/05 02:58

这道题不难,一些细节处理好了就可以了。

主要是把气球数大于自己的插入到set里面,每次更新最小的size就好了。

要注意数据要开long long,还有set里面数据的处理。

#include<bits/stdc++.h>using namespace std;const int maxn = 3e5+5;multiset<long long> ranks;typedef pair<long long,long long> pii;pii num[maxn];bool cmp(pii a,pii b) {return a.first > b.first;}int main() {int n;scanf("%d",&n);long long s,e;int cnt = 0;scanf("%I64d%I64d",&s,&e);for(int i = 0;i < n-1;i++) {long long x,y;scanf("%I64d%I64d",&x,&y);num[cnt].first = x;num[cnt].second = y;cnt++;}sort(num,num+cnt,cmp);int ans = maxn,i = 0;while(1) {while(num[i].first > s && i < cnt) {ranks.insert(num[i].second - num[i].first + 1);i++;}int tt = ranks.size();if(tt < ans)ans = tt;if(tt == 0) break;if(tt > 0) {long long it = *ranks.begin();  //注意这里的写法,错了就RE~//printf("%I64d\n",*it);if(it > s) break;else {ranks.erase(ranks.begin());s -= it;}}}if(ans == maxn) ans = 0;printf("%d\n",ans+1);}

错了很多的小地方,写的时候要细心点,思考全面点。

加油!

0 0
原创粉丝点击