求大佬帮忙,调傻了
查看原帖
求大佬帮忙,调傻了
648660
Name1楼主2022/8/1 18:08
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=1e5+10;
long long t,a,b,c,x,y,gcd,dx,dy,minx,miny,maxx,maxy,mins,maxs,num;
inline void exgcd(long long a,long long b,long long &x,long long &y)
{
	if(b==0){x=1,y=0;return;}
	exgcd(b,a%b,y,x);
	y-=a/b*x;
}
inline long long read()
{
	long long x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')x=x*10+c-48,c=getchar();
	return x*f;
}
signed main()
{
	t=read();
	while(t--)
	{
		a=read(),b=read(),c=read();
		exgcd(a,b,x,y);
		gcd=a*x+b*y;
	    if(c%gcd) 
		{
			puts("-1");
			continue;
		}
		x*=c/gcd,y*=c/gcd;
		dx=b/gcd,dy=a/gcd;
		mins=ceil((1.0-x)/dx),maxs=(y-1)/dy;//if((y-maxs*dy)<0) maxs--;
		if(mins>maxs) 
		{
			minx=x+mins*dx;
			miny=y-maxs*dy;
			printf("%lld %lld\n\n",minx,miny);
		}
		else 
		{
			num=maxs-mins+1;
			minx=x+mins*dx;
			miny=y-maxs*dy;
			maxx=x+maxs*dx;
			maxy=y-mins*dy;
			printf("%lld %lld %lld %lld %lld\n\n",num,minx,miny,maxx,maxy);
		}
	}
	return 0;
}
2022/8/1 18:08
加载中...