C++ 10ptsWA玄关求调
查看原帖
C++ 10ptsWA玄关求调
1235819
_std_xzh楼主2024/10/16 22:11
#include<bits/stdc++.h>
using namespace std;
int T , m , a , b , c;
int lcm(int x , int y){
    return x * y / __gcd(x , y);
}
bool pf(int x){
	return (int(sqrt(x)) * int(sqrt(x)) == x);
}
int main(){
    cin >> T >> m;
    while(T--){
        cin >> a >> b >> c;
        int delta = b * b - 4 * a * c;
        if(delta < 0){
            cout << "NO\n";
            continue;
        }
        int fx , fy;
        bool flag = 0;
        if(-b % (2 * a) == 0)fx = -b / (2 * a) , fy = 1;
        else{
            int x = -b , y = 2 * a , d = __gcd(x , y);
            x /= d , y /= d;
            fx = x , fy = y;
            if(fy < 0)fx = -fx , fy = -fy;
            flag = 1;
        }
        if(!delta){
            if(!flag)cout << fx;
            else cout << fx << '/' << fy;
            cout << '\n';
            continue; 
        }
        if(pf(delta)){
            int x = sqrt(delta) , y = 2 * a;
            int ans2 = lcm(fy , y) , ans1 = fx * lcm(fy , y) / fy + x * lcm(fy , y) / y;
            int d = __gcd(ans2 , ans1);
            ans2 /= d , ans1 /= d;
            if(ans2 < 0)ans1 = -ans1 , ans2 = -ans2;
            if(ans2 == 1)cout << ans1;
            else cout << ans1 << '/' << ans2;
        }
        else{
        	if(fx){
        		if(!flag)cout << fx;
	            else cout << fx << '/' << fy;
	            cout << '+';
			}  
            int x = 0;
            for(int i = 1;i * i <= delta;i++){
                if(delta % i)continue;
                if(pf(i))x = max(x , i);
                if(pf(delta / i))x = max(x , delta / i);
            }
            int r = delta / x;
            x = sqrt(x);
            int y = 2 * a;
            int d = __gcd(x , y);
            x /= d , y /= d;
            if(y != 1){
        		if(x != 1)cout << x << '*' << "sqrt(" << r << ')' << '/' << abs(y);
                else cout << "sqrt(" << r << ')' << '/' << abs(y);
            }
            else{
                if(x != 1)cout << x << '*' << "sqrt(" << r << ')';
                else cout << "sqrt(" << r << ')';
            }
        }
        cout << '\n';
    }
    return 0;
}
2024/10/16 22:11
加载中...