exgcd板子题,那就谢谢巨佬萌帮蒟蒻debug吧
//60分代码
#include<cstdio>
#include<iostream>
#define rg register
#define il inline
#define ENDL putchar('\n')
#define SPACE putchar(' ')
using namespace std;
template <typename T> il void Iput(T &x)
{
char c;
while((c=getchar())<'0' || c>'9');
x = c^48;
while((c=getchar())>='0' && c<='9') x = (x<<1) + (x<<3) + (c^48);
}
template <typename T> void Wri(T x)
{
if(x > 9) Wri(x/10);
putchar(x%10^48);
}
template <typename T> il void Oput(T x)
{
if(x < 0) putchar('-'), x=-x;
Wri(x);
}
int T;
void exgcd(int a, int b, int &g, int &x, int &y)
{
if(!b)
{
x=1; y=0; g=a;
}
else
{
exgcd(b, a%b, g, y, x);
y -= x*(a/b);
}
}
int main()
{
Iput(T);
for(rg int rp=1 ; rp<=T ; ++rp)
{
int a, b, c, x, y, g, num, xmin, ymin, xmax, ymax;
Iput(a), Iput(b), Iput(c);
exgcd(a, b, g, x, y);
if(c%g)
{
putchar('-'), putchar('1'), ENDL;
continue;
}
/*
c /= g;
x *= c;
y *= c;
这样只有30分??
*/
x *= c/g;
y *= c/g;
a /= g;
b /= g;
xmin = (x%b+b)%b;
ymin = (y%a+a)%a;
if(!xmin) xmin += b;
if(!ymin) ymin += a;
a *= g;
b *= g;
xmax = (c-b*ymin)/a;
ymax = (c-a*xmin)/b;
a /= g;
b /= g;
num = (xmax-xmin)/b+1;
if(xmax<=0 || ymax<=0)
{
Oput(xmin);
SPACE;
Oput(ymin);
ENDL;
}
else
{
Oput(num);
SPACE;
Oput(xmin);
SPACE;
Oput(ymin);
SPACE;
Oput(xmax);
SPACE;
Oput(ymax);
ENDL;
}
}
return 0;
}