60 pts 求调
查看原帖
60 pts 求调
1412938
A7F3jK9pR0xf_楼主2024/8/9 08:35

WA on #2 4 9 10

#include <bits/stdc++.h>
using namespace std;
inline int gcd(int a, int b)
{
	return b == 0 ? a : gcd(b, a%b);	
} 
inline bool n2(int n)
{
	int sqr = sqrt(n);
	return sqr*sqr == n;
}
inline int xn2(int n)
{
	// 求n的最大平方因子
	int sqr = sqrt(n);
	for(int i = sqr;i >= 1;--i)
	{
		if(n % (i*i) == 0) return i*i;
	}
	return 0;
}
inline void f(int a, int b, int c)
{
	if(a < 0)
	{
		a = -a;
		b = -b;
		c = -c;
	}
	int tri = b*b-4*a*c;
	if(tri < 0)
	{
		cout << "NO\n";
		return;
	}
	if(n2(tri))
	{
		int trim = 2*a, tris = max(-b+sqrt(tri), -b-sqrt(tri));
		int g = abs(gcd(trim, tris));
		trim /= g;
		tris /= g;
		if(tris % trim == 0) printf("%d\n", tris/trim);
		else printf("%d/%d\n", tris, trim);
		return;
	}
	int q1s = -b, q1m = 2*a;
	int g = abs(gcd(q1s, q1m));
	q1s /= g;
	q1m /= g;
	if(q1s != 0 && q1m != 0) 
	{
		if(q1s % q1m == 0) printf("%d+", q1s/q1m); 
		else printf("%d/%d+", q1s, q1m);
	}
	int big = xn2(tri), q2s = sqrt(big), q2m = 2*a;
	int r = tri/big;
	g = abs(gcd(q2s, q2m));
	q2s /= g;
	q2m /= g;
	if(q2s == q2m) printf("srqt(%d)\n", r);
	else if(q2s % q2m == 0)
	{
		printf("%d*srqt(%d)\n", q2s/q2m, r);
		return;
	}
	else
	{
		double q2 = 1.0*q2s/q2m;
		int q3 = 1/q2;
		if(q3 == 1/q2) printf("sqrt(%d)/%d\n", r, q3);
		else printf("%d*sqrt(%d)/%d\n", q2s, r, q2m);
	}
}
int main()
{
	int t, m, a, b, c;
	cin >> t >> m;
	while(t--)
	{
		scanf("%d%d%d", &a, &b, &c);
		f(a, b, c);
	}
	return 0;
}

2024/8/9 08:35
加载中...