求助为什么 把cin>>t改成scanf就能过
查看原帖
求助为什么 把cin>>t改成scanf就能过
844423
SU00YU楼主2022/12/30 16:47

求助为什么 把cin>>t改成scanf就能过

#include <bits/stdc++.h>

#define LL long long
#define INF INT_MAX
#define endl "\n"
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

using namespace std;
const int N = 3e6 + 10;

LL gcd(LL n, LL m)
{
	return (n % m == 0) ? m : gcd(m, n % m);
}

void exgcd(LL a, LL b, LL& x, LL& y)
{
	if (b == 0) {
		x = 1, y = 0;
		return;
	}
	LL p;
	exgcd(b, a % b, x, y);
	p = x;
	x = y;
	y = p - (a / b) * y;
	return;
}

int main()
{
	IOS;
	LL t = 0;
	//cin >> t;
	scanf("%lld", &t);
	while (t--) {
		LL a, b, c, g, x = 0, y = 0, x_min, y_min, x_max, y_max, ok = 0, k;
		scanf("%lld%lld%lld", &a, &b, &c);
		g = gcd(a, b);
		if (c % g != 0) puts("-1");
		else {
			a /= g;
			b /= g;
			c /= g;
			exgcd(a, b, x, y);
			x *= c;
			y *= c;//特解
			x_min = x > 0 && x % b != 0 ? x % b : x % b + b;
			y_max = (c - x_min * a) / b;
			y_min = y > 0 && y % a != 0 ? y % a : y % a + a;
			x_max = (c - y_min * b) / a;
			if (x_max > 0)
				ok = (x_max - x_min) / b + 1;
			if (!ok)
				printf("%lld %lld\n", x_min, y_min);
			else printf("%lld %lld %lld %lld %lld\n", ok, x_min, y_min, x_max, y_max);
		}
	}
	return 0;
}
2022/12/30 16:47
加载中...