ZJ CSP-J T3求调 悬关
  • 板块灌水区
  • 楼主sadly_shark
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/29 21:19
  • 上次更新2023/11/2 10:46:25
查看原帖
ZJ CSP-J T3求调 悬关
743650
sadly_shark楼主2023/10/29 21:19

rt,悬关,先到先得。 10pts

#include<bits/stdc++.h>
using namespace std;
int T,M,a,b,c,deltta,prime[1010];
map<int,bool> mp;
int gcd(int x,int y){
	if(y==0)return x;
	return gcd(y,x%y);
}
void printyls(int p,int q){
	int ggcd=gcd(q,p);
	q/=ggcd,p/=ggcd;
	if(q<0)q*=-1,p*=-1;
	if(q==1)printf("%d",p);
	else printf("%d/%d",p,q); 
} 
void printwls(){
	int qq=1;
	int pp=2*a;
	if(b!=0)printyls(0-b,pp),printf("+");
	for(int i=2;prime[i]<=deltta;){
		if(deltta%prime[i]==0)qq*=i,deltta/=prime[i];
		else i++;
	}
	if(pp<0)pp*=-1;
	if(qq==pp){
		printf("sqrt(%d)",deltta);
		return;
	}
	if(qq%pp==0){
		qq/=pp;
		printf("%d*sqrt(%d)",qq,deltta);
		return;
	}
	if(pp%qq==0){
		pp/=qq;
		printf("sqrt(%d)/%d",deltta,pp);
		return;
	}
	int gccd=gcd(qq,pp);
	qq/=gccd,pp/=gccd;
	printf("%d*sqrt(%d)/%d",qq,deltta,pp);
}
int main(){
	
	freopen("uqe.in","r",stdin);
	freopen("uqe.out","w",stdout);
	
	for(int i=0;i<=1000;i++)mp[i*i]=1,prime[i]=i*i;
	scanf("%d%d",&T,&M);
	while(T--){
		scanf("%d%d%d",&a,&b,&c);
		deltta=b*b-4*a*c;
		if(deltta<0){
			printf("NO\n");
			continue;
		}
		if(mp[deltta])printyls(sqrt(deltta)-b,2*a);
		else printwls();
		printf("\n");
	}
	return 0;
}
2023/10/29 21:19
加载中...