题目:
http://codeforces.com/contest/1443/problem/D
给定一个数组,每次可以让前 k k k个数字减 1 1 1,或者后 k k k个数字减 1 1 1,请问能否使得所有数字变为 0 0 0。
思路:
首先差分,把操作变成在差分数组上的操作,然后因为所有数字要变为
0
0
0,所以我们知道最后的差分数组。分析一下即可。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int T,a[30009],b[30009];
int main() {
scanf("%d",&T);
while(T--) {
int n,sum=0,sum1=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=2;i<=n;i++)
b[i]=a[i-1]-a[i];
for(int i=2;i<=n;i++){
if(b[i]>0)
sum+=b[i];
else if(b[i]<0)
sum1-=b[i];
}
if(a[1]-sum>=0&&a[n]-a[1]+sum==sum1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}