計蒜客: 小z的合影
阿新 • • 發佈:2018-11-16
https://nanti.jisuanke.com/t/16498
題目描述
上海迪士尼今年終於開園,小z在開園的第一天就來玩了,也有很多小朋友來玩,小朋友們最喜歡和氣球合影了。小z恰好有一些氣球,這樣小朋友就可以和小z合影了,小z也最喜歡和小朋友合影了。但是每個小朋友都很傲嬌,對氣球的數量都有要求,如果小z的氣球少於這個數量小朋友是不會和小z合影的。同時每個小朋友都有一些棒棒糖,在合影之後就會把棒棒糖給小z。為了能讓更多的小朋友和小z合影,小z可以去買更多的氣球。恰好小p在迪士尼裡賣氣球,小z每花費一個花費糖可以從小p那裡買到一個氣球。
現在,請幫助小z和更多的小朋友合影。
輸入描述
輸入包含多組資料。
每組資料的第一行有兩個整數n和k,1<=n<10000,1<=k<10000,表示有n個小朋友,小z手裡有k個氣球。
下面有n行,每行兩個整數ai和bi,1<=ai,bi<100000000,表示第i的小朋友有ai個棒棒糖,希望與至少bi個氣球合影。
輸出描述
對每一組輸入資料,輸出一行,小z最多能和多少小朋友合影。
樣例輸入
2 1 1 5 4 1 2 2 5 6 3 1
樣例輸出
2 1
先按照所需要的氣球排序,再按照順序拍照即可,因為只有從最小的開始才能獲得更多的糖果去換取氣球。如果最小的都滿足不了,後面的也無法滿足,直接跳出迴圈。
#include<stdio.h> #include<algorithm> #define N 100200 using namespace std; struct data { int a; int b; }a[N]; int cmp(struct data x,struct data y) { return x.b>y.b?0:1; } int main() { long long n,i,ans,sum; while(scanf("%lld%lld",&n,&sum)!=EOF) { ans=0; for(i=0;i<n;i++) scanf("%d%d",&a[i].a,&a[i].b); sort(a,a+n,cmp); for(i=0;i<n;i++) { if(sum>=a[i].b) { sum+=a[i].a; ans++; } else break; } printf("%lld\n",ans); } return 0; }