这个输出问题很大怎么办??急等
查看原帖
这个输出问题很大怎么办??急等
536439
YONIC楼主2022/5/17 21:26

样例中第二行的1600,3199,30399,第五行的2,50,56不输出数字只输出空行

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
int Qread(){
	int x=0,f=1;
    char ch=getchar();
    while(!isdigit(ch)){
		if(ch=='-') f=-1;
		ch=getchar();
	}
    while(isdigit(ch)){
		x=(x<<3)+(x<<1)+ch^'0';
		ch=getchar();
	}
    return x*f;
}
int gcd(int a,int b){
	return b?gcd(b,a%b):a;
}
void exgcd(int a,int b,int&x,int&y){
	if(!b){
		x=1;
		y=0;
		return;
	}
	exgcd(b,a%b,x,y);
	int k=x;
	x=y;
	y=k-y*(a/b);
}
signed main(){
	t=Qread();
	while(t--){
		int u,v,w,x,y;
		u=Qread();
		v=Qread();
		w=Qread();
		if(w%gcd(u,v)) puts("-1");
		else{
			int d=gcd(u,v);
			exgcd(u,v,x,y);
			x*=w/d;
			y*=w/d;
			int p=v/d,q=u/d,k;
			if(x<0){
				if((1-x)%p) k=(1-x)/p+1;
				else k=(1-x)/p;
				x+=p*k;
				y-=q*k;
			}
			else{
				k=(x-1)/p;
				x-=p*k;
				y-=q*k;
			}
			if(y>0){
				printf("%lld ",(y-1)/q+1);
				printf("%lld ",x);
				printf("%lld ",(y-1)%q+1);
				printf("%lld ",x+(y-1)/q*p);
				printf("%lld ",y);
			}
			else{
				printf("%lld ",x);
				int k2;
				if((1-y)%q) k2=(1-y)/q+1;
				else k2=(1-y)/q;
				printf("%lld ",y+q*k2);
			}
		}
        puts("");
	}
	return 0;
}
2022/5/17 21:26
加载中...