J组T3求调(违规紫衫
  • 板块题目总版
  • 楼主time_keeper
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/29 11:36
  • 上次更新2023/11/2 10:56:11
查看原帖
J组T3求调(违规紫衫
820574
time_keeper楼主2023/10/29 11:36

J组T3求调

和正确代码对拍一样

#include<bits/stdc++.h>
#define ll long long
#define pp puts("A");
using namespace std;
ll T,M,a,b,c;
ll ck(ll r){
	ll roww=0;
	for(int i=2;i<=sqrt(r);i++){
		if(r%i == 0){
			ll tmp=r,cnt=0,ppp=1;
			while(tmp%i == 0){
				ppp*=i;
				cnt++;
				tmp/=i;
			}
			if(cnt>1){
				if(cnt&1){
					roww*=sqrt(ppp/i);
					r/=ppp/i;
				}else{
					roww*=sqrt(ppp);
					r/=ppp;
				}
			}
		}
	}
	return r;
}
ll zdgys(ll x,ll y){
	if(y == 0) return x;
	return zdgys(y,x%y);
}
void rrout(ll x,ll y){
	ll z=zdgys(x,y);
	if(x*y<0) putchar('-');
	x/=z,y/=z;
	if(y!=1) printf("%lld/%lld",abs(x),abs(y));
	else printf("%lld",abs(x));
}
void mmout(ll p,ll q,ll r){
	ll roww=1;
	if(p*q<0) putchar('-');
	ll gr=ck(r);
	p*=sqrt(r/gr);
	r=gr;
	ll z=zdgys(abs(p),abs(q));
	p/=z,q/=z;
	if(abs(q) == 1&&abs(p)!=1) printf("%lld*sqrt(%lld)",abs(p),r);
	else if(abs(p) == 1&&abs(q)!=1) printf("sqrt(%lld)/%lld",r,abs(q));
	else if(abs(p) == 1&&abs(q) == 1) printf("sqrt(%lld)",r);
	else{
		printf("%lld*sqrt(%lld)/%lld",abs(p),r,abs(q));
	} 
}
void ccout(ll x,ll y,ll p,ll q,ll r){
	ll gr=ck(r);
	if(gr == 1){
		x=x*q+(p*sqrt(r))*y;
		y*=q; 
		p=0;
		q=0;
		r=0;
	}
	if(x!=0){
		rrout(x,y);
		if(r!=0&&p!=0&&p*q>0){
			putchar('+');
		} 
	}
	if(r!=0&&p!=0){
		mmout(p,q,r);
	}
	puts("");
}
int main(){
//	freopen("baoli.in","r",stdin);
//	freopen("wode.out","w",stdout);
	scanf("%lld%lld",&T,&M);
	while(T--){
		scanf("%lld%lld%lld",&a,&b,&c);
		if(b == 0){
			if(a*c>0) puts("NO");
			else{
				ccout(0,1,1,a,-a*c);
			}
			continue;
		}
		if(c == 0){
			if(b >= 0) puts("0");
			else ccout(-b,a,0,0,0);
			continue;
		}
		
		ll d=b*b-4*a*c;
		if(d<0){
			puts("NO");
			continue;
		}
		if(a > 0) ccout(-b,2*a,1,2*a,d);
		if(a < 0) ccout(-b,2*a,-1,2*a,d);
	}
	return 0;
} 
2023/10/29 11:36
加载中...