Codeforces Round #577 (Div. 2)--Zero Array
Zero Array(思维)
题意:题目给你一串数列,你可以从中任选两个数据(
),可以这两个数减一,问最后能否将这个数列的全部元素变为0
题解:这个题目如果简单的用模拟来做的话会超时,这里,我们采用另一种思路,你想,要想全部的元素变为0,也就是它进行的sum次减一操作,而每两个为一组,也就是它进行了sum/2次的操作,即等于,若sum为奇数则不可能是实现,其次,我们还要注意,我们要选择两个坐标不同的数据,如果数列中的最大值大于sum的一半,则这个最大值肯定不能通过和其他数据进行抵消而变为0,这是两个条件,符合这两个条件,即可实现题目要求。
代码:
#include<iostream>
#include<queue>
#define ll long long
using namespace std;
int main(){
ll temp,n,sum=0;
cin>>n;
ll max_n=-1;
for(int i=0;i<n;i++){
cin>>temp;
if(max_n<temp){
max_n=temp;
}
sum+=temp;
}
if(sum%2==0&&max_n<=sum/2) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
} 
