题目链接
https://codeforces.com/contest/1486/problem/A
思路
首先解释题意,给你n组物品,每组物品的个数是ai个,你只能把物品从ai挪动到a(i+1)上(就是只能从左往右移)(不限次数),问通过这样操作能不能将这组物品弄成一个严格的单调递增序列。
我的想法是既然是严格单调递增的,我们可以构造一个0,1,2…这样的严格的单调递增的等差序列,将原序列前面的个数尽可能的构造成这样的等差序列,最后再遍历一遍整个序列看是不是严格单调递增即可。
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,n;
ll a[110];
int main()
{
scanf("%lld",&t);
while(t--)
{
memset(a,0,sizeof(a));
scanf("%lld",&n);
ll flag=0,ans=0;
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
for(int i=0;i<n-1;i++)
{
if(a[i]>=ans)
{
a[i+1]+=(a[i]-ans);
a[i]=ans;
}
ans++;
}
for(int i=0;i<n-1;i++)
{
if(a[i]>=a[i+1])
{
flag=1;
break;
}
}
if(flag) printf("NO\n");
else printf("YES\n");
}
return 0;
}