社区讨论
J组T3洛谷RE90求助
学术版参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo0utumf
- 此快照首次捕获于
- 2023/10/22 10:33 2 年前
- 此快照最后确认于
- 2023/11/02 12:14 2 年前
是爆数组了还是除 0 之类的?小图灵 RE80,前两题确认AC,坐标 ZJ 能稳 1= 吗?
code:
CPP#include <bits/stdc++.h>
using namespace std;
void solve(int, int, int, int);
int cclt(int, bool);
int main(){
freopen("uqe.in", "r", stdin);
freopen("uqe.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int T, M;
cin >> T >> M;
while(T --){
int a, b, c;
cin >> a >> b >> c;
int dlt = b * b - 4 * a * c;
if(dlt < 0) cout << "NO\n";
else solve(a, b, c, dlt);
}
return 0;
}
void solve(int a, int b, int c, int dlt){
bool opdlt;
double r1 = (1.0 * (-b) - dlt) / (2 * a);
double r2 = (1.0 * (-b) + dlt) / (2 * a);
opdlt = r1 > r2? 0: 1;
int sdlt = sqrt(dlt);
if(sdlt * sdlt == b * b - 4 * a * c){
int u = opdlt? (-b) + sdlt: (-b) - sdlt;
int d = 2 * a;
int mod = __gcd(abs(u), abs(d));
u /= mod, d /= mod;
if(u < 0 && d < 0) u = (-u), d = (-d);
if(u > 0 && d < 0) u = (-u), d = (-d);
if(u % d == 0) cout << u / d << '\n';
else cout << u << '/' << d << '\n';
}
else{
int m = cclt(dlt, 1), n = cclt(dlt, 0);
int u1 = (-b), d1 = 2 * a;
int u2 = opdlt? m: (-m), d2 = 2 * a;
int mod1 = __gcd(abs(u1), abs(d1));
int mod2 = __gcd(abs(u2), abs(d2));
u1 /= mod1, d1 /= mod1;
if(u1 < 0 && d1 < 0) u1 = (-u1), d1 = (-d1);
if(u1 > 0 && d1 < 0) u1 = -(u1), d1 = (-d1);
if(u1){
if(u1 % d1 == 0) cout << u1 << '+';
else cout << u1 << '/' << d1 << '+';
}
u2 /= mod2, d2 /= mod2;
if(u2 < 0 && d2 < 0) u2 = -(u2), d2 = -(d2);
if(u2 > 0 && d2 < 0) u2 = -(u2), d2 = -(d2);
if(u2 % d2 == 0){
if(u2 == 1) cout << "sqrt(" << n << ")\n";
else cout << (u2 / d2) << "*sqrt(" << n << ")\n";
}
else if(d2 % u2 == 0){
if(d2 == 1) cout << "sqrt(" << n << ")\n";
else cout << "sqrt(" << n << ")/" << (d2 / u2) << '\n';
}
else cout << u2 << "*sqrt(" << n << ")/" << d2 << '\n';
}
return ;
}
int cclt(int dlt, bool f){
int m = 1, n = dlt, k = 2;
while(dlt > 1){
while(dlt % (k * k) == 0) m *= k, dlt /= k * k, n /= k * k;
while(dlt % k == 0) dlt /= k;
k ++;
}
if(f) return m;
return n;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...