50分求调
查看原帖
50分求调
785529
4399__楼主2024/8/26 20:59

样例过了,但是一堆wa与re?

#include<bits/stdc++.h>
using namespace std;
int gys(int a,int b){
	if(a%b==0) return b;
	else return gys(b,a%b);
}
double zs(double s){
	return s-int(s);
}
int hj(int a){
	int o=1,x=a;
	for(int i=2;i<=x;i++){
		while(a%(i*i)==0){
			a=a/(i*i);
			o*=i;
		}
	}
	return o;
} 
int main(){
	int t,m;
	cin>>t>>m;
	for(int i=1;i<=t;i++){
		int a,b,c;
		double max;
		cin>>a>>b>>c;
		if(pow(b,2)-4*a*c<0) cout<<"NO\n";
		else{
			if(a>0) max=(-b+sqrt(b*b-4*a*c))/(2*a);
			else max=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);
			if(zs(max)==0){
				cout<<int(max)<<"\n";	
			} 
			else{
				if(zs(sqrt(pow(b,2)-4*a*c))==0){
					if(2*a/gys(max*2*a,2*a)<0) cout<<-(max*2*a)/gys(max*2*a,2*a)<<"/"<<2*-a/gys(max*2*a,2*a)<<"\n";
					else cout<<(max*2*a)/gys(max*2*a,2*a)<<"/"<<2*a/gys(max*2*a,2*a)<<"\n";
				} 
				else{
					if(b!=0){
						if(zs(1.0*-b/(2*a))==0) cout<<int(-b/(2*a))<<"+";
						else {
							if(2*a/gys(-b,2*a)<0)cout<<b/gys(-b,2*a)<<"/"<<-2*a/gys(-b,2*a)<<"+";
							else cout<<-b/gys(-b,2*a)<<"/"<<2*a/gys(-b,2*a)<<"+";
						}
						
						
					}
					int r=hj(pow(b,2)-4*a*c);
					if(a>0){	
						if(r/(2*a)==1) printf("sqrt(%0.f)\n",(pow(b,2)-4*a*c)/pow(r,2));
						else if(zs(1.0*r/(2*a))==0) printf("%d*sqrt(%0.f)\n",r/(2*a),(pow(b,2)-4*a*c)/pow(r,2));
						else if(zs(1.0*2*a/r)==0) printf("sqrt(%0.f)/%d\n",(pow(b,2)-4*a*c)/pow(r,2),2*a/r);
						else printf("%d*sqrt(%0.f)/%d\n",r/gys(r,2*a),(pow(b,2)-4*a*c)/pow(r,2),2*a/gys(r,2*a)); 
						 
					}
					else{
							if(r/(2*a)==1) printf("sqrt(%0.f)\n",(pow(b,2)-4*a*c)/pow(r,2));
						else if(zs(1.0*r/(-2*a))==0) printf("%d*sqrt(%0.f)\n",r/(-2*a),(pow(b,2)-4*a*c)/pow(r,2));
						else if(zs(1.0*-2*a/r)==0) printf("sqrt(%0.f)/%d\n",(pow(b,2)-4*a*c)/pow(r,2),-2*a/r);
						else printf("%d*sqrt(%0.f)/%d\n",r/gys(r,-2*a),(pow(b,2)-4*a*c)/pow(r,2),2*a/gys(r,-2*a));
					}
				}
			}
		}
	}
	return 0;
}

2024/8/26 20:59
加载中...