60分玄关求调(有一点灵异事件)
查看原帖
60分玄关求调(有一点灵异事件)
1180231
H_dream楼主2024/9/23 20:48
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,m;
void print(int p,int q){
	int x=__gcd(p,q);
	p/=x, q/=x;
	if(q<0) q=-q, p=-p;
	if(q==1) cout<<p;
	else cout<<p<<'/'<<q;
	return ;
}
int h[40];


signed main(){
	for(int i=1;i<35;++i) h[i]=i*i;
	cin>>T>>m;
	while(T--){
		int a,b,c;
		cin>>a>>b>>c;
		if(a<0)
			a=-a, b=-b, c=-c;
		int tmp=b*b-4*a*c;
		if(tmp<0)
			cout<<"NO";
		else{
			double cnt=sqrt(tmp*1.0);
			int p,q=2*a;
			double x=(-b+cnt)/q, y=(-b-cnt)/q;
			if(cnt*cnt==tmp){
				if(x>y) p=-b+cnt;
				else p=-b-cnt;
				print(p,q);	
			}
			else {
				p=-b;
				if(p!=0){
					print(p,q);
					cout<<'+';
				}
				int s;
				if(x>y) s=1;
				else s=-1;
				p=1;
				for(int i=34;i>1;--i){
					if(tmp%h[i]==0){
						tmp/=h[i];
						p=i;
						break;
					}
				}
				p*=s;
				int z=__gcd(p,q);
				p/=z, q/=z;
				if(p!=1)
					cout<<p<<'*';
				cout<<"sqrt("<<tmp<<')';
				if(q!=1)
					cout<<'/'<<q;
			}
		}
		cout<<endl;
	}
	
	return 0;
}

测试点2本地编译器过了,但交上去过不了

2024/9/23 20:48
加载中...