关于CSP-J T3
  • 板块学术版
  • 楼主ZBAA_MKC
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/27 20:59
  • 上次更新2023/11/2 11:10:47
查看原帖
关于CSP-J T3
228770
ZBAA_MKC楼主2023/10/27 20:59

先不说WA的问题,求教为啥会RE五个

#include <bits/stdc++.h>
using namespace std;
int square[2005];

pair<int, int> minimize(int x)
{
	for (int i = 2000; i > 0; i--)
	{
		if (x % square[i] == 0)
		{
			return make_pair(i, x / square[i]);
		}
	}
}

bool isSquare(int x)
{
	for (int i = 1; i <= 2000; i++)
	{
		if (x == square[i])
		{
			return 1;
		}
	}
	return 0;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t, m;
	cin >> t >> m;
	for (int i = 1; i <= 2 * m; i++)
	{
		square[i] = i * i;
	}
	while (t--)
	{
		int a, b, c;
		cin >> a >> b >> c;
		int delta = b * b - 4 * a * c;
		if (delta < 0)
		{
			cout << "NO" << endl;
			continue;
		} 
		pair<int, int> ans = minimize(delta);
		int xishu = ans.first;
		int genshi = ans.second;
		int g2 = __gcd(abs(xishu), abs(2 * a));
		int XISHU = xishu / g2;
		int A2 = abs(2 * a / g2); 
		if (b == 0)
		{
			if (A2 == 1 && XISHU == 1)
			{
				printf("sqrt(%d)\n", genshi);
			}
			if (A2 == 1 && XISHU != 1)
			{
				printf("%d*sqrt(%d)\n", XISHU, genshi);
			}
			if (A2 != 1 && XISHU == 1)
			{
				printf("sqrt(%d)/%d\n", genshi, A2);
			}
			if (A2 != 1 && XISHU != 1)
			{
				printf("%d*sqrt(%d)/%d", XISHU, genshi, A2);
			}
			continue;
		}
		else
		{
				int g1 = __gcd(abs(-b), abs(2 * a));
			int B = -b / g1;
			int A1 = 2 * a / g1;
			if (delta == 0)
			{
				if (A1 == 1)
				{
					printf("%d\n", B);
				}
				else
				{
					printf("%d/%d\n", B, A1);
				}
				continue;
			}
			if (isSquare(delta))
			{
				int fenzi = B * A2 + sqrt(delta) * A1;
				int fenmu = A1 * A2;
				if (fenmu < 0)
				{
					fenzi *= -1;
					fenmu *= -1;
				}
				int g = __gcd(fenzi, fenmu);
				fenzi /= g;
				fenmu /= g;
				if (fenmu == 1)
				{
					printf("%d\n", fenzi);
				}
				else
				{
					printf("%d/%d\n", fenzi, fenmu);
				}
				continue;
			}
			if (A1 < 0)
			{
				B *= -1;
				A1 *= -1;
			}
			if (XISHU == 1)
			{
				if (A1 == 1 && A2 != 1)
				{
					printf("%d+sqrt(%d)/%d\n", B, genshi, A2); 
				}
				else if (A1 != 1 && A2 == 1)
				{
					printf("%d/%d+sqrt(%d)\n", B, A1, genshi);
				}
				else
				{
					printf("%d/%d+sqrt(%d)/%d\n", B, A1, genshi, A2);
				}
			}
			else
			{
				if (A1 == 1 && A2 != 1)
				{
					printf("%d+%d*sqrt(%d)/%d\n", B, XISHU, genshi, A2); 
				}
				else if (A1 != 1 && A2 == 1)
				{
					printf("%d/%d+%d*sqrt(%d)\n", B, A1, XISHU, genshi);
				}
				else
				{
					printf("%d/%d+%d*sqrt(%d)/%d\n", B, A1, XISHU, genshi, A2);
				}
			}
		}
		
	}
	return 0;
} 
2023/10/27 20:59
加载中...