阿朱与旭宝宝的高楼游戏---差分

阅读 81

2022-02-28

在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;
#define int long long
#define x first
#define y second
const int N = 100010;
int h[N];
void solve()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>h[i];
	for(int i=n;i>=1;i--)h[i]-=h[i-1];
	int res=0;
	for(int i=n;i-m>0;i--)
		if(h[i]>0)
			res+=h[i],h[i-m]+=h[i],h[i]=0;
	for(int i=2;i+m-1<=n;i++)
		if(h[i]<0)res-=h[i],h[i+m]+=h[i],h[i]=0;
	for(int i=2;i<=n;i++)
		if(h[i])
			res=-1;
	cout<<res<<'\n';
}
signed main()
{
	int T;cin>>T;
	while(T--)solve();
}

精彩评论(0)

0 0 举报