codeforces.com/contest/1201/problem/B

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 }

 

posted @ 2019-08-27 10:42  Chuhanjing  阅读(146)  评论(0编辑  收藏  举报