80分求调
  • 板块P1852 跳跳棋
  • 楼主_0000000_
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/6/18 18:40
  • 上次更新2025/6/19 18:42:01
查看原帖
80分求调
1438191
_0000000_楼主2025/6/18 18:40

WA了第2、6、18、20点

是因为什么问题 求大佬解答

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct node{
	long long a,b,c,k;
}t1;
vector<node> qz1;
bool flag;
void build()
{
	for(int wz=0;;wz++)
	{
		if(qz1[wz].b-qz1[wz].a==qz1[wz].c-qz1[wz].b)
		{
			return;
		}
		node t;
		if(qz1[wz].b-qz1[wz].a>qz1[wz].c-qz1[wz].b)
		{
			long long d1=qz1[wz].b-qz1[wz].a,d2=qz1[wz].c-qz1[wz].b;
			t.k=(d1-1)/d2;
			t.a=qz1[wz].a;
			t.b=qz1[wz].b-t.k*d2;
			t.c=qz1[wz].c-t.k*d2;
			t.k+=qz1[wz].k;
		}
		else
		{
			long long d1=qz1[wz].b-qz1[wz].a,d2=qz1[wz].c-qz1[wz].b;
			t.k=(d2-1)/d1;
			t.a=qz1[wz].a+t.k*d1;
			t.b=qz1[wz].b+t.k*d1;
			t.c=qz1[wz].c;
			t.k+=qz1[wz].k;
		}
		if(t1.a==t.a&&t1.b==t.b&&t1.c==t.c)
		{
			flag=1;
			printf("YES\n%lld",t.k);
			return;
		}
		qz1.push_back(t);
	}
	return;
}
bool chick(node x,node y,long long d3)
{
	if(x.b-x.a>x.c-x.b)
	{
		long long d2=x.c-x.b;
		x.b-=d3*d2;
		x.c-=d3*d2;
	}
	else
	{
		long long d1=x.b-x.a;
		x.a+=d3*d1;
		x.b+=d3*d1;
	}
	if(y.b-y.a>y.c-y.b)
	{
		long long d2=y.c-y.b;
		y.b-=d3*d2;
		y.c-=d3*d2;
	}
	else
	{
		long long d1=y.b-y.a;
		y.a+=d3*d1;
		y.b+=d3*d1;
	}
	if(x.a==y.a&&x.b==y.b&&x.c==y.c)
	{
		return 1;
	}
	return 0;
}
long long er(node x,node y,long long r)
{
	long long l=1;
	while(l<r)
	{
		long long mid=(l+r)/2;
		if(chick(x,y,mid))
		{
			r=mid;
		}
		else
		{
			l=mid+1;
		}
	}
	return l;
}
long long step(node x,node y)
{
	if(x.k<y.k)
	{
		swap(x,y);
	}
	long long d3=x.k-y.k;
	if(x.b-x.a>x.c-x.b)
	{
		long long d2=x.c-x.b;
		x.b-=d3*d2;
		x.c-=d3*d2;
	}
	else
	{
		long long d2=x.b-x.a;
		x.b+=d3*d2;
		x.a+=d3*d2;
	}
	if(x.a==y.a&&x.b==y.b&&x.c==y.c)
	{
		return d3;
	}
	return er(x,y,y.k)+d3;
}
void buil()
{
	while(1)
	{
		if(t1.b-t1.a==t1.c-t1.b)
		{
			return;
		}
		node t=t1;
		if(t1.b-t1.a>t1.c-t1.b)
		{
			long long d1=t1.b-t1.a,d2=t1.c-t1.b;
			long long d3=(d1-1)/d2;
			t1.b=t1.b-d3*d2;
			t1.c=t1.c-d3*d2;
			t1.k+=d3;
		}
		else
		{
			long long d1=t1.b-t1.a,d2=t1.c-t1.b;
			long long d3=(d2-1)/d1;
			t1.a=t1.a+d3*d1;
			t1.b=t1.b+d3*d1;
			t1.k+=d3;
		}
		for(int i=0;i<qz1.size();i++)
		{
			if(qz1[i].a==t1.a&&qz1[i].b==t1.b&&qz1[i].c==t1.c)
			{
				flag=1;
				long long t1k=t.k,tk;
				node qz;
				if(i==0)
				{
					tk=0;
					qz=qz1[0];
				}
				else
				{
					qz=qz1[i-1];
					qz.k=qz1[i].k-qz1[i-1].k;
					tk=qz1[i-1].k;
				}
				t.k=t1.k-t.k;
				printf("YES\n%lld",tk+t1k+step(qz,t));
				return;
			}
		}
	}
	return;
}
int main()
{
	qz1.resize(1);
	scanf("%lld%lld%lld%lld%lld%lld",&qz1[0].a,&qz1[0].b,&qz1[0].c,&t1.a,&t1.b,&t1.c);
	if(qz1[0].a>qz1[0].c)
	{
		swap(qz1[0].a,qz1[0].c);
	}
	if(qz1[0].a>qz1[0].b)
	{
		swap(qz1[0].a,qz1[0].b); 
	}
	if(qz1[0].c<qz1[0].b)
	{
		swap(qz1[0].c,qz1[0].b);
	}
	if(t1.a>t1.c)
	{
		swap(t1.a,t1.c);
	}
	if(t1.a>t1.b)
	{
		swap(t1.a,t1.b); 
	}
	if(t1.c<t1.b)
	{
		swap(t1.c,t1.b);
	}
	if(qz1[0].a==t1.a&&qz1[0].b==t1.b&&qz1[0].c==t1.c)
	{
		printf("YES\n0");
		return 0;
	}
	build();
	if(flag)
	{
		return 0;
	}
	buil();
	if(!flag)
	{
		printf("NO");
		return 0;
	}
	return 0;
}
2025/6/18 18:40
加载中...