题意:有N种糖果,每种有Mi(0<Mi<=1000000)个,是否存在一种吃糖果顺序使得相邻糖果不相同(先吃这一种,再吃下一种)。
分析:插空,如果最多的一种糖果,能被剩下所有的糖果插空,则存在,即ans - 1 <= sum - ans.
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<set> 6 #include<map> 7 #include<algorithm> 8 #include<cstdlib> 9 #include<vector> 10 #include<cmath> 11 #include<sstream> 12 using namespace std; 13 int main() 14 { 15 int N; 16 while(scanf("%d", &N) != EOF) 17 { 18 int sum = 0; 19 int ans = 0; 20 for(int i = 0; i < N; ++i) 21 { 22 int x; 23 scanf("%d", &x); 24 ans = max(ans, x); 25 sum += x; 26 } 27 if(ans - 1 > sum - ans) 28 printf("No\n"); 29 else printf("Yes\n"); 30 } 31 return 0; 32 }