【悬2关】求调
查看原帖
【悬2关】求调
782768
Mierstan085楼主2024/7/9 11:00

30 分,WA on #2, 3, 4 & #7, 8, 9, 10

// 期望得分:100pts 
#include <bits/stdc++.h>
#define int long long
using namespace std;

int M;

int sqrtez(int delta){
	int ans = 1;
	for (int i = 2; i * i <= delta; i ++){
		if (delta % (i * i) == 0){
			ans = i;
		}
	}
	return ans;
}

void solve1(){
	int a, b, c;
	cin >> a >> b >> c;
	
	int delta = b * b - 4 * a * c;
	if (delta < 0){
		puts("NO");
		return ;
	}
	
	int x1, x2, y = 2 * a;
	if ((int)sqrt(delta) * (int)sqrt(delta) == delta){
		// delta 有理 
		x1 = (int)sqrt(delta) - b;
		x2 = 0 - b - (int)sqrt(delta);
		
		int ax1x, ax1y, ax2x, ax2y;
		// x1
		ax1x = x1 / __gcd(x1, y);
		ax1y = y / __gcd(x1, y);
		// x2
		ax2x = x2 / __gcd(x2, y);
		ax2y = y / __gcd(x2, y);
		
		if (ax1x * 1.0 / ax1y >= ax2x * 1.0 / ax2y){
			if (ax1y == 1){
				cout << ax1x << '\n';
			}else{
				if ((ax1y < 0 && ax1x >= 0) || (ax1x < 0 && ax1y < 0)){
					ax1x = 0 - ax1x;
					ax1y = 0 - ax1y;
				}
				cout << ax1x << '/' << ax1y << '\n';
			}
		}else{
			if (ax2y == 1){
				cout << ax2x << '\n';
			}else{
				if ((ax2y < 0 && ax2x >= 0) || (ax2x < 0 && ax2y < 0)){
					ax2x = 0 - ax2x;
					ax2y = 0 - ax2y;
				}
				cout << ax2x << '/' << ax2y << '\n';
			}
		}
	}else{
		// delta 无理 -2 16 -8
		// q1
		x1 = -b;
		if (x1 != 0){
			if (x1 % y == 0){
				cout << x1 / y;
			}else{
				int x1x, x1y;
				x1x = x1 / __gcd(x1, y);
				x1y = y / __gcd(x1, y);
				if ((x1x >= 0 && x1y < 0) || (x1x < 0 && x1y < 0)){
					x1x = - x1x;
					x1y = - x1y;
				}
				cout << x1x << '/' << x1y;
			}
			cout << '+';
		}
		// q2
		int q2 = sqrtez(delta);
		int r = delta / q2 / q2;
		
		if (q2 == y){
			cout << "sqrt(" << r << ")\n";
		}else if (q2 % y == 0){
			if (q2 / y == -1) cout << "sqrt(" << r << ")\n";
			else cout << (q2 / y < 0 ? -1 : 1) * q2 / y << "*sqrt(" << r << ")\n";
		}else{
			int q2x, q2y;
			q2x = q2 / __gcd(q2, y);
			q2y = y / __gcd(q2, y);
			if ((q2y < 0 && q2x >= 0) || (q2x < 0 && q2y < 0)){
				q2x = - q2x;
				q2y = - q2y;
			}
			
			if (q2x < 0) q2x = - q2x;
			if (q2x != 1) cout << q2x << '*';
			cout << "sqrt(" << r << ")/" << q2y << '\n';
		}
	}
}

signed main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	// freopen("uqe.in", "r", stdin);
	// freopen("uqe.out", "w", stdout);
	
	int T;
	cin >> T >> M;
	
	while (T --) solve1();
}
2024/7/9 11:00
加载中...