普及 T3 60pts 求 Hack
  • 板块学术版
  • 楼主Genius_Star
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/10/22 19:50
  • 上次更新2023/10/22 20:59:11
查看原帖
普及 T3 60pts 求 Hack
979266
Genius_Star楼主2023/10/22 19:50

Rt。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
const ll N=1010;
ll T,M,cnt=0,sum=0;
ll F[N];
ll a,b,c;
void print(ll x,ll y){
	ll t=__gcd(x,y);
	x/=t,y/=t;
	if(y<0){
		y=-y;
		x=-x;
	}
	if(y==1)
	  printf("%lld",x);
	else
	  printf("%lld/%lld",x,y);
}
bool check(ll &x){
	bool f=0;
	for(int i=1;i<=cnt;i++){
		if(F[i]>x)
		  break;
		if(x%F[i]==0){
			sum*=sqrt(F[i]);
			f=1;
			x/=F[i];
		}
	}
	return f;
}
int main(){
// 	freopen("uqe.in","r",stdin);
// 	freopen("uqe.out","w",stdout);
	scanf("%lld%lld",&T,&M);
	for(int i=2;;i++){
		if(i*i>M)
		  break;
		F[++cnt]=i*i;
	}
	while(T--){
		sum=1;
		scanf("%lld%lld%lld",&a,&b,&c);
		ll t=b*b-4.0*a*c;
		if(t<0){
			puts("NO");
			continue;
		}
		if(t==0){
			print(-b,2*a);
			putchar('\n');
			continue;
		}
		ll k=sqrt(t);
		if(k*k==t){
			if(((db)(((db)(-b+k))/(db)(2*a)))>((db)(((db)(-b-k))/((db)(2*a)))))
			  print(-b+k,2*a);
			else
			  print(-b-k,2*a);
			putchar('\n');
			continue;
		}
		if(b){
			print(-b,2*a);
			putchar('+');
		}
		while(check(t));
		ll x=2*a;
		ll v=__gcd(x,sum);
		x/=v,sum/=v;
		if(x==sum){
			printf("sqrt(%lld)\n",t);
			continue;
		}
		if(sum%x==0){
			ll d=abs(sum/x);
			if(d==1)
			  printf("sqrt(%lld)\n",t);
			else
			  printf("%lld*sqrt(%lld)\n",d,t);
			continue;
		}
		if(sum==1){
			printf("sqrt(%lld)/%lld\n",t,abs(x));
			continue;
		}
		printf("%lld*sqrt(%lld)/%lld\n",abs(sum),t,abs(x));
	}
// 	fclose(stdin);
// 	fclose(stdout);
	return 0;
}
2023/10/22 19:50
加载中...