HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。
2 3 4 1 1 5 5 4 3 2 1
No YesPlease use function scanf
思路简单考虑两种糖果,假设其中一种最大数量为n,要想这两种糖果交替吃完,
则另一种糖果最少的数量为n-1.因为n个糖果排成一排,
内部一共有n-1个空,分离相邻的两个相同的糖果。回到题目中,找出某种糖果的最大数量maxvalue,
至少需要maxvalue-1个糖果(即除去最大数量剩下的糖果)去填充空隙
。如果剩下的糖果数大于maxvalue,也是可以的,
因为我们可以想成把数量较少的糖果用来“加厚”原来的空隙,
即可以两个或两个以上不同的糖果去填充同一个空隙。
代码:
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> using namespace std; int main() { int T; scanf("%d",&T); while(T--) { int n,maxx=-1,a; long long num=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a); if(a>maxx) maxx=a; num+=a; } if(maxx>(num-maxx)+1) printf("No\n"); else printf("Yes\n"); } }
转载http://www.xuebuyuan.com/2184674.html