样例能过,提交全错,求
查看原帖
样例能过,提交全错,求
1029340
CR400BF_1145楼主2025/7/22 20:05
#include<bits/stdc++.h>
using namespace std;
int t,m;
int gcd(int a,int b)
{
    bool neg=(a<0&&b<0);
    a=abs(a),b=abs(b);
    while(b)
    {
    	int temp=b;
    	b=a%b,a=temp;
	}
	return neg?-a:a;
}
void print_fs(int a,int b) 
{
	int gcdab=gcd(a,b);
	a/=gcdab,b/=gcdab;
	if(b<0) a=-a,b=-b;
	else if(b==1) cout<<a;
	else cout<<a<<'/'<<b;
	return;
}
int delta(int a,int b,int c)
{
    return b*b-4*a*c;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>t>>m;
    for(int i=1;i<=t;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        if(delta(a,b,c)<0) cout<<"NO";
        else if(delta(a,b,c)==0)
            print_fs(-b,2*a);
        else
        {
            int sqrt_out=1,sqrt_in=delta(a,b,c);
            for(int j=2;j*j<=sqrt_in;j++)
            {
                while(sqrt_in%(j*j)==0)
                    sqrt_out*=j,sqrt_in/=j*j;
            }
            int x=-b,y=2*a,v=2*a;
            int g1=gcd(x,y),g2=gcd(sqrt_out,v);
            x/=g1,y/=g1,sqrt_out/=g2,v/=g2;
            if(y<0) x=-x,y=-y;
            if(v<0) sqrt_out=-sqrt_out,v=-v;
            if(sqrt_in==1)
            {
                x=x*v+sqrt_out*y,y*=v;
                int g=gcd(x,y);
                x/=g,y/=g;
                if(y<0) x=-x,y=-y;
                print_fs(x,y);
            }
            else
            {
                if(x!=0)
                {
                    print_fs(x,y);
                    if(sqrt_out>0) cout<<'+';
                }
                if(v==1)
                {
                    if(sqrt_out==1) cout<<"sqrt("<<sqrt_in<<')';
                    else cout<<sqrt_out<<"*sqrt("<<sqrt_in<<')';
                }
                else
                {
                    if(sqrt_out==1) cout<<"sqrt("<<sqrt_in<<")/"<<v;
                    else cout<<sqrt_out<<"*sqrt("<<sqrt_in<<")/"<<v;
                }
            }
        }
        cout<<endl;
    }
    return 0;
}
2025/7/22 20:05
加载中...