求助WA50
查看原帖
求助WA50
481337
Pratty楼主2023/11/1 12:38
#include <bits/stdc++.h>
#define int long long
using namespace std;
const double eps = 1e-10;
int t, m;
int a, b, c;
int gcd(int a, int b) {
	return !b ? a : gcd(b, a%b);
}
int suan(int &x) {
	int qian = 1;
	for (int i = 1; i * i <= x; i++) {
		int tp = i * i;
		if (x % tp == 0) {
			qian *= i;
			x /= tp;
		}
	}
	return qian;
}
signed main() {
	scanf("%lld%lld", &t, &m);
	while (t--) {
		scanf("%lld%lld%lld", &a, &b, &c);
		int san = pow(b, 2) - 4 * a * c;
		if (san < 0) {
			printf("NO\n");
			continue;
		}
		int qiu = sqrt(san);
		if (qiu * qiu == san) {
			double ans1 = -1e18, ans2 = -1e18;
			int chs11 = -1, chs12 = -1;
			qiu -= b;
			int xia = 2 * a;
			if (qiu % xia == 0) {
				ans1 = qiu / xia;
			} else {
				int chu = gcd(qiu, xia);
				int nqiu = qiu / chu;
				int nxia = xia / chu;
				if (nxia < 0) {
					nxia = -nxia;
					nqiu = -nqiu;
				}
				ans1 = (1.0 * nqiu) / (1.0 * nxia);
				chs11 = nqiu, chs12 = nxia;
			}
			qiu += b;
			qiu = -qiu;
			qiu -= b;
			if (qiu % xia == 0) {
				int ans = max(ans1, 1.0 * qiu / xia);
				printf("%lld\n", ans);
				continue;
			} else {
				int chu = gcd(qiu, xia);
				qiu /= chu;
				xia /= chu;
				if (xia < 0) {
					xia = -xia;
					qiu = -qiu;
				}
				ans2 = (1.0 * qiu) / (1.0 * xia);
				if (ans2 - ans1 > eps)printf("%lld/%lld\n", qiu, xia);
				else printf("%lld/%lld\n", chs11, chs12);
				continue;
			}
		} else {
			int q1a = -b, q1b = 2 * a;
			if (q1a % q1b == 0) {
				if (q1a / q1b != 0) printf("%lld+", q1a / q1b);
			} else {
				qiu = q1a;
				int xia = q1b;
				int chu = gcd(qiu, xia);
				int nqiu = qiu / chu;
				int nxia = xia / chu;
				if (nxia < 0) {
					nxia = -nxia;
					nqiu = -nqiu;
				}
				printf("%lld/%lld+", nqiu, nxia);
			}
			int kuo = pow(b, 2) - 4 * a * c;
			int qian = suan(kuo);
			int chu = 2 * a;
			int qu = gcd(qian, chu);
			qian /= qu;
			chu /= qu;
			if (chu < 0) {
				chu = -chu;
				qian = abs(qian);
			}
			if (qian != 1) printf("%lld*", qian);
			printf("sqrt(%lld)", kuo);
			if (chu != 1) printf("/%lld", chu);
			printf("\n");
		}
	}
	return 0;
}
2023/11/1 12:38
加载中...