B. Zero Array
一道思维题
因为每次操作对于sum会减少2,所以如果sum是奇数肯定不可以。另外,如果最大值大于前面n-1个数的总和,也一定不可以。其他情况都可以。
证明:
如果最后一个数等于前面n-1个数的总和,那显然可以。
最后一个数小于前面n-1个数的总和,通过每次操作,前面n-1个数的总和会减少2.那么通过一定次数的操作,最大值会等于签名n-1个数的总和。所以成立
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e5+5; 4 typedef long long ll; 5 6 ll a[maxn]; 7 ll sum[maxn]; 8 int main(){ 9 int n;cin>>n; 10 ll sum=0;ll maxx=0; 11 for(int i=1;i<=n;i++) 12 { 13 cin>>a[i];sum+=a[i];maxx=max(maxx,a[i]); 14 } 15 if(sum%2==1) 16 { 17 cout <<"NO\n";return 0; 18 } 19 if(maxx*2>sum) 20 { 21 cout <<"NO\n";return 0; 22 } 23 cout <<"YES\n"; 24 25 return 0; 26 }