小Z的合影
Thing Level:★★☆☆☆
Description:
上海迪士尼今年终于开园,小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
Code:
#include <bits/stdc++.h>
#define MAXN 10010
struct Node
{
long long candy;
long long ballon;
}node[MAXN];
using namespace std;
bool cmp(const Node& x, const Node& y)
{
return x.ballon < y.ballon;
}
int main(void)
{
int n;
long long k;
while (scanf("%d%lld", &n, &k)!=EOF) //多组输入
{
int ans = 0;
for (int i = 0; i < n; i++)scanf("%lld%lld", &node[i].candy, &node[i].ballon);
sort(node, node + n, cmp);
while (ans < n&&node[ans].ballon<=k)k += node[ans++].candy;
printf("%lld\n", ans);
}
return 0;
}
The Key:
- 题目为多组输入;
- 题目并没有说小朋友是按顺序来的,就当做小Z去找小朋友咯;
- 既然如3所示,那么小朋友的傲娇度就要排下序啦;
- 一颗糖果换一个气球,那就直接合完影后加上糖果数就可以咯;
The Change:
- sort(,,cmp)用法;
人生断无易处之境遇,人间哪来空闲之光阴
—— 曾国藩