J组T3求助
  • 板块学术版
  • 楼主___A__
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/21 21:41
  • 上次更新2023/10/21 21:43:01
查看原帖
J组T3求助
275860
___A__楼主2023/10/21 21:41
#include<bits/stdc++.h>
using namespace std;
int T,a,b,c;
int ok(int x){
	return (int)(sqrt(x))*(int)(sqrt(x))==x;
}
void print(int x,int y){
	if(y<0){
		x=-x,y=-y;
	}
	int tmp=__gcd(abs(x),abs(y));
	x/=tmp,y/=tmp;
	if(x%y==0){
		cout<<x/y<<"+";
	}
	else{
		cout<<x<<"/"<<y<<"+"; 
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>T>>a;
    while(T--){
    	cin>>a>>b>>c;
    	int delta=b*b-4*a*c,out=0;
    	if(delta<0){
    		cout<<"NO\n";
    		continue;
		}
		//x1=(-b-sqrt(delta))/2a x2=(-b+sqrt(delta))/2a  抽象为x1=(-b-x)/a x2=(-b+x)/a 
		if((-b-sqrt(delta))/2/a>(-b+sqrt(delta))/2/a){
			out=1;
		}
		else{
			out=2;
		}
		if(ok(delta)){
			delta=(int)sqrt(delta);
			if(out==1){//(-b-delta)/2a
				if((-b-delta)%(2*a)==0){
					cout<<(-b-delta)/(2*a);
				}
				else{
					int x=-b-delta;
					a*=2;
					int tmp=__gcd(abs(x),abs(a));
					a/=tmp,x/=tmp;
					cout<<x<<"/"<<a;
				}
			}
			else{//(-b+delta)/2a
				if((-b+delta)%(2*a)==0){
					cout<<(-b+delta)/(2*a);
				}
				else{
					int x=-b+delta;
					a*=2;
					int tmp=__gcd(abs(x),abs(a));
					a/=tmp,x/=tmp;
					cout<<x<<"/"<<a;
				}
			}
		}
		else{
			//-b/2a
		    if(b){
		    	print(-b,2*a);
			}
			int tmp=1;
			for(int i=2;i<=1e3;i++){
				while(delta&&delta%(i*i)==0){
					delta/=(i*i),tmp*=i;
				}
			}
			if(out==1){
				a*=-2;
			}
			else{
				a*=2;
			}
			if(a<0){
				a=-a,tmp=-tmp;
			}
			int num=__gcd(abs(a),abs(tmp));
			tmp/=num,a/=num;//tmp*sqrt(delta)/a
			if(tmp!=1){
				cout<<tmp<<"*";
				cout<<"sqrt("<<delta<<")";
				if(a!=1){
					cout<<"/"<<a;
				}
			}
			else{
				cout<<"sqrt("<<delta<<")";
				if(a!=1){
					cout<<"/"<<a;
				}
			}
		}
		cout<<'\n';
	}
}
2023/10/21 21:41
加载中...