NC221818. lzh的蹦床
描述
输入描述
第一行输入一个正整数 ,表示测试用例的个数
接下来 个用例,
每个用例第一行一个正整数 ,表示蹦床的数量;
第二行有 个正整数 ,表示每个蹦床的弹力值。
输出描述
对于每组用例,输出一个整数,表示sky最少需要跳多少趟
示例1
输入:
3 7 1 4 2 2 2 2 2 2 2 3 5 1 1 1 1 1
输出:
4 3 0
说明:
C++ 解法, 执行用时: 412ms, 内存消耗: 564K, 提交时间: 2021-09-14 20:06:22
#include <bits/stdc++.h> using namespace std; typedef long long ll; int a[5010]; int d[5010]; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int _; cin>>_; while(_--){ memset(d,0,sizeof(d)); int n; cin>>n; ll ans=0,cnt=0; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ cnt+=d[i]; if(a[i]-1>cnt) ans+=a[i]-cnt-1; else{ d[i+1]+=cnt-a[i]+1; d[i+2]-=cnt-a[i]+1; } if(a[i]>1){ d[min(5001,i+a[i]+1)]--; d[i+2]++; } } cout<<ans<<"\n"; } return 0; }