题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2046
FREETALK的小游戏
总提交:158 测试通过:42
描述
Freetalk是科协的传统活动,每周五晚都会举办一次freetalk,让科协的成员们围在一起愉快的聊天,愉快的玩耍。Freetalk的主持者,往往都是办公室的同学。为了把freetalk办得新颖、生动、有趣,办公室的同学,尤其是顾主席,每次都要花费很多的心思来准备。这周的freetalk又要开始了,这次,顾主席想出了一个有趣的游戏。游戏的规则是这样的:在一张桌子上放上一个空的大杯子,和n个装满水的马克杯。所有的玩家依次轮流进行游戏,当到一个玩家来进行游戏时,这名玩家要选出一个装满水的马克杯,并将其中的水全部倒入大杯子中,如果大杯子里的水溢出了,那么我们就认为这名玩家输了。
顾主席觉得这个游戏挺不错的,不过他有一点顾虑,如果每轮游戏都会有人输,那么输的那个人肯定就会不开心了,这样可不太好,顾主席是不希望有人不开心的。因此,顾主席想找出是否有这样一种方式,使得除了顾主席以外的所有人都不会输。现在我们告诉你所有马克杯的容积和大杯子的容积。除此之外,你应该知道,除了顾主席以外还有(n-1)个人要玩这个游戏。请你判断一下,是否有这样一种可能,除了顾主席以外的(n-1)个人里面,没有人会输。
输入
第一行,包含两个整数n和s(2 <= n <= 100; 1 <= s <= 1000),分别表示马克杯的数目还有大杯子的容积,下一行包含n个整数,a1,a2,...,an(1 <= ai <= 10),数字ai表示第i个马克杯的体积。
输出
在单独的一行,打印“YES”(不包括引号),如果除了顾主席以外的(n-1)个人可能都不会输,否则,打印“NO”。
样例输入
3 4
1 1 1
样例输出
YES
提示
input
3 4
3 1 3
output
YES
input
3 4
4 4 4
output
NO
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=111;
int a[MAXN];
int main()
{
int n,s;
while(scanf("%d%d",&n,&s)==2)
{
for(int i=0;i<n;++i)
scanf("%d",&a[i]);
sort(a,a+n);
int sum=0;
for(int i=0;i<n-1;++i)
sum+=a[i];
if(sum+a[n-1]<=s||sum<=s&&sum+a[n-1]>s)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}