社区讨论
关于CSP-J T3
学术版参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo8merfk
- 此快照首次捕获于
- 2023/10/27 20:59 2 年前
- 此快照最后确认于
- 2023/11/02 11:10 2 年前
先不说WA的问题,求教为啥会RE五个
CPP#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;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...