rt,25min 想到做法,比赛结束都没有写出来。
#include <bits/stdc++.h>
using namespace std;
long long t,n,k,a[300000];
int main()
{
scanf("%lld",&t);
while(t--)
{
long long p=0,len=0,flag=1;
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
p=a[1],len=k;
for(int i=2;i<=n;i++)
{
if(a[i]>p)
{
p+=(a[i]-p)/(k*2)*(k*2);
if(p+len-a[i]<=0)
{
p+=k*2;
if(a[i]+k-p<=0)
{
printf("-1\n"),flag=0;
break;
}
else len=a[i]+k-p;
}
else len=p+len-a[i],p=a[i];
}
else if(p>a[i])
{
a[i]+=((p-a[i])/(k*2)+1)*(k*2);
if(p+len-a[i]<=0)
{
a[i]-=k*2;
if(a[i]+k-p<=0)
{
printf("-1\n"),flag=0;
break;
}
else len=a[i]+k-p;
}
else len=p+len-a[i],p=a[i];
}
}
if(flag)printf("%lld\n",p);
}
return 0;
}
OI 不适合我,退役算了。