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