吃糖果
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 24390 Accepted Submission(s): 6969
Problem Description
HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。
Input
第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0<N<=1000000),第二行是N个数,表示N种糖果的数目Mi(0<Mi<=1000000)。
Output
对于每组数据,输出一行,包含一个"Yes"或者"No"。
Sample Input
2 3 4 1 1 5 5 4 3 2 1
Sample Output
No YesPlease use function scanfHintHint
可以找出这些糖果中个数最多的种类 最多的个数记为an
模拟为有an个抽屉 把其他n-1种类的糖果往这an个抽屉中放 因为an是最大的 所以同一个抽屉中可以不出现同一种类的糖果 所以只要保证 这an个抽屉中 最多有一个为空就可以
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#define eps 1e-8
#define op operator
#define MOD 10009
#define MAXN 1000010
#define INF 0x7fffffff
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FOV(i,a,b) for(int i=a;i>=b;i--)
#define REP(i,a,b) for(int i=a;i<b;i++)
#define REV(i,a,b) for(int i=a-1;i>=b;i--)
#define MEM(a,x) memset(a,x,sizeof a)
#define ll __int64
using namespace std;
ll a[MAXN];
int main()
{
//freopen("ceshi.txt","r",stdin);
int tc;
scanf("%d",&tc);
while(tc--)
{
int n;
scanf("%d",&n);
ll sum=0;
for(int i=0;i<n;i++)
{
scanf("%I64d",&a[i]);
sum+=a[i];
}
sort(a,a+n);
sum-=a[n-1];
if(sum+1>=a[n-1])
puts("Yes");
else puts("No");
}
return 0;
}
本文介绍了一道编程题目,任务是确定是否能通过特定顺序消耗不同类型的糖果,使得每次不会连续吃相同的糖果。通过寻找糖果数量的最大值,并判断是否能合理分配其他糖果到相应的“抽屉”中来解决该问题。
&spm=1001.2101.3001.5002&articleId=40603077&d=1&t=3&u=96a783c89d5e46b2a3850fe03112641d)
682

被折叠的 条评论
为什么被折叠?



