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;
}