codeforces div2#703AB
A
题意
给你n堆积木,第i个堆有hi个块,其高度就是其中的块数。在一次移动中,你可以选择从第i个堆里取出1块,加到i+1个堆里,问你可不可以让高度的顺序严格递增。
思路
用两个前缀和sum和need,sum用来记录所有块的数量,need从0开始,后面元素依次+1的总和(把每堆多余的统计起来,加到最后,也可实现递增),就只用比较sum和need的大小了,sum<need,就代表没有足够多的积木用来实现递增
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++)
cin>>a[i];
long long sum=0,need=0;
for(int i=0;i<n;++i)
{
need+=i;
sum+=a[i];
if(sum<need){
cout<<"NO\n";
return;
}
}
cout<<"YES"<<endl;
}
int main(){
int t;
cin>>t;
while(t--)
solve();
return 0;
}