心态炸了 为什么 C 这样写不对
  • 板块学术版
  • 楼主w9095
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/5 00:36
  • 上次更新2024/8/5 09:26:00
查看原帖
心态炸了 为什么 C 这样写不对
569235
w9095楼主2024/8/5 00:36

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 不适合我,退役算了。

2024/8/5 00:36
加载中...