其实问题可以转化为:一堆数中有若干个1,若干个2,若干个3,...,若干个n,问是否存在一种排列的方式使得相邻的两个数不同,转化完以后问题就简单了。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 typedef long long ll; 7 8 int main () 9 { 10 int t; 11 scanf("%d", &t); 12 while ( t-- ) 13 { 14 int n, tmp, maxn = -1; 15 ll sum = 0; 16 scanf("%d", &n); 17 for ( int i = 0; i < n; i++ ) 18 { 19 scanf("%d", &tmp); 20 sum += tmp; 21 maxn = max( maxn, tmp ); 22 } 23 if ( maxn - 1 <= sum - maxn ) printf("Yes "); 24 else printf("No "); 25 } 26 return 0; 27 }