WA on #2 #4 #8 #10 求调
查看原帖
WA on #2 #4 #8 #10 求调
962682
BJqxszx_zhuyukun楼主2024/7/23 07:27
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
#define int long long
#define __gcd(l,r) __gcd(abs(l),abs(r))
int t,m,a,b,c,g,l,r,lr,p,x,gcds;
inline bool dsqrt(int x){
	int l=0,r=x;
	while(l<=r){
		int mid=l+r>>1;
		if(mid*mid==x) return true;
		if(mid*mid<x) l=mid+1;
		else r=mid-1;
	}
	return false;
}
signed main(){
	cin>>t>>m;
	while(t--){
		cin>>a>>b>>c;
		g=b*b-4*a*c;
		if(g<0){
			cout<<"NO\n";
			continue;
		}
		if(dsqrt(g)){
			l=-b;
			r=a<<1;
			if(r>0) l+=sqrt(g);
			else l-=sqrt(g);
			gcds=__gcd(l,r);
			l/=gcds;
			r/=gcds;
			if(r<0) l=-l,r=-r;
			if(l==0) cout<<"0\n";
			else if(r==1) cout<<l<<'\n';
			else cout<<l<<'/'<<r<<'\n';
			continue;
		}
		l=-b;
		r=lr=a<<1;
		gcds=__gcd(l,r);
		l/=gcds;
		r/=gcds;
		if(r<0) l=-l,r=-r;
		if(l==0) goto sqrtpos;
		if(r==1) cout<<l;
		else cout<<l<<'/'<<r;
		cout<<'+';
		sqrtpos:
		p=1;
		x=0;
		for(int i=sqrt(g);i>=1;i--){
			if(g%(i*i)==0){
				p=i;
				x=g/(i*i);
				break;
			}
		}
		gcds=__gcd(p,lr);
		p/=gcds;
		lr/=gcds;
		if(lr<0) p=-p,lr=-lr;
		if(p==lr) cout<<"sqrt("<<x<<")\n";
		else if(lr==1) cout<<p<<"*sqrt("<<x<<")\n";
		else if(p==1) cout<<"sqrt("<<x<<")/"<<lr<<'\n';
		else cout<<p<<"*sqrt("<<x<<")/"<<lr<<'\n';
	}
	return 0;
} 
2024/7/23 07:27
加载中...