普及T3 TLE求调
  • 板块学术版
  • 楼主Anemo_Slime
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/21 21:25
  • 上次更新2023/11/2 12:07:52
查看原帖
普及T3 TLE求调
964563
Anemo_Slime楼主2023/10/21 21:25

看不懂为什么会te了

#include<bits/stdc++.h>
using namespace std;
#define ld long double
ld r,p,q;
ld getDelta(ld a,ld b,ld c){
 	return b*b-4*a*c;
}
bool check(ld a){
	return abs(a)-abs((int)a)<=0.0000001;
} 
int gcd(int a,int b){
	if(b==0) return a;
	a%=b;
	return gcd(b,a);
}
int getq2(int a){
	if(check(sqrt(a))) return sqrt(a);
	for(ld i=a-1;i>=2;i--){
		if(a%(int)i==0&&check(sqrt(i))){
			r=a/i;
			return sqrt(i); 
		}
	}
	r=a;
	return 1;
}
void getEasy(int &a,int &b){
	int _gcd=gcd(a,b);
	a/=_gcd;
	b/=_gcd;
}
void outV(ld x,int f1,int f2,int t){
				if(check(x)){
					if(!t)cout<<x;
					else{
						p=x,q=1;
					}
				}
				else{
					int flag1=1,flag2=1;
					if(f1<0) flag1=-1;
					if(f2<0)flag2=-1;
					f1=abs(f1),f2=abs(f2);
					getEasy(f1,f2);
					flag1*=flag2;
					flag2=1; 
				if(f1==0) flag1=0;
				if(!t)	cout<<f1*flag1<<"/"<<f2*flag2;
				else p=f1*flag1,q=f2*flag2; 
				}
}
long double T,M,a,b,c;
int main(){
//	freopen("uqe.in","r",stdin);
//	freopen("uqe.out","w",stdout);
	cin>>T>>M;
	while(T--){
		cin>>a>>b>>c;
		ld delta;
		int flag=1;
		delta=getDelta(a,b,c);
		if(delta<0){
			cout<<"NO\n";
			continue;
		}
		else{
			if(((-b-sqrt(delta))/(2*a))>((-b+sqrt(delta))/(2*a))) flag=-1; 
			ld x=max(((-b+sqrt(delta))/(2*a)),((-b-sqrt(delta))/(2*a)));
//			cout<<((-b-sqrt(delta))/(2*a))<<" "<<((-b+sqrt(delta))/(2*a))<<endl;
			if(check(sqrt(delta))){
				
				if(check(x)){
					if(abs(x)==0) x=0;
					cout<<x<<endl;
					continue;
				}
				else{
					int flag1=1,flag2=1,f1=-b+sqrt(delta)*flag,f2=2*a;
					if(f1<0) flag1=-1;
					if(f2<0)flag2=-1;
					f1=abs(f1),f2=abs(f2);
					getEasy(f1,f2);
					flag1*=flag2;
					flag2=1; 
					if(f1==0) cout<<0<<endl;
					else cout<<f1*flag1<<"/"<<f2*flag2<<endl;
					continue;
				}
			}
			else{
				ld q1=-b/(2*a),q2=getq2(delta)*flag;
				if(q1){
				outV(q1,-b,2*a,0);
				cout<<"+";
				}
				outV(q2/(2*a),q2,2*a,1);
				
				if(p!=1) {
				if(p!=0)cout<<p<<"*";
				else cout<<"*";
				}
				cout<<"sqrt("<<r<<")";
				if(q!=1) {
				if(q!=0)cout<<"/"<<q;
				}
				cout<<endl;
			}
		}
	}

}

2023/10/21 21:25
加载中...