一道因缺斯汀的题目
先来看看题目
Description
歌手The Pancakes到幼儿园跟小朋友玩耍,她到达的时候小朋友们已经争着积木玩了。小朋友都想要更多的积木砌一个自己喜欢的图形,砌完就可以和The Pancakes合照。同时,The Pancakes手上还有一些积木,她可以把手上的这些积木全部给一个小朋友,然后等该小朋友砌完后就可以收回所发的积木和该小朋友原先手上的积木。但她不知道能否让所有的小朋友都和她合照,聪明的你可以帮助她吗?
Input
输入包含多个数据。
每个数据的第一行是两个正整数n和s,1≤n≤10000,1≤s≤1000000,表示一共有n位小朋友,The Pancakes手上有s块积木。以下有n行,每行有两个正整数,a和b,1≤a,b≤10^9,表示第i个小朋友手上有a块积木,还需要b块积木才能够砌完。
输入n=0时表示结束。
Output
如果可以让所有小朋友都和Pancake合照,就输出YES;否则,输出NO。
Sample Input
2 2
1 4
2 1
2 2
1 4
1 1
0 0
Sample Output
YES
NO
Problem Source
ZSUACM Team Member
(为了出道题,TA们也是为了剧情操碎了心~)
下面是我的代码
#include<stdio.h>
#include<string.h>
int main() {
int k, n, phave, boyhave, need1, i, j, temp, rest, yn;
int have[1000], need[1000];
//输入数据
for (scanf("%d %d", &n, &phave); n != 0; scanf("%d %d", &n, &phave)) {
for (k = 0; k < n; k++) {
scanf("%d %d", &boyhave, &need1);
have[k] = boyhave;
need[k] = need1;
}
//冒泡,小的在前
for (j = 0; j < n - 1; j++) {
for (i = 0; i < n - 1; i++) {
if (need[i] > need[i + 1]) {
temp = need[i];
need[i] = need[i + 1];
need[i + 1] = temp;
temp = have[i];
have[i] = have[i + 1];
have[i + 1] = temp;
} } }
//开始分积木
rest = n;
for (k = 0; k < n; k++) {
if (phave >= need[k]) {
rest--;
phave = phave + have[k];
} } if (0 == rest)
printf("YES\n");
else
printf("NO\n");
} return 0;
}