csp-j T3 求调
  • 板块灌水区
  • 楼主Sexy_Foxy
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/24 19:50
  • 上次更新2023/11/2 11:33:27
查看原帖
csp-j T3 求调
781352
Sexy_Foxy楼主2023/10/24 19:50

50分,T4都打出来了,就这题死活不知道哪里错了

#include<bits/stdc++.h>
using namespace std;
int a,b,c,T,m;
bool f,big;
void changed1(int a,int b){
	if(a%b==0){
		if(a/b==0){
			f=1;
			return;
		}
		printf("%d",a/b);
		return;
	}
	int gcd=__gcd(a,b);
	a/=gcd,b/=gcd;
	if(a>0&&b<0) a=-a,b=-b;
	printf("%d/%d",a,b);
}
int changed3(int x){
	for(int i=2;i*i<=x;i++){
		if(x%i==0){
			if(sqrt(i)==(int)(sqrt(i))) return i;
			if(sqrt(x/i)==(int)(sqrt(x/i))) return x/i;
		}
	}
	return -1;
}
void changed2(int a,int b,int c){
	int r=sqrt(c),d=-1;
	if(sqrt(c)==r){
		if(r==0) return;
		if(!f) printf("+");
		int gcd=__gcd(a,r);
		a/=gcd,r/=gcd;
		if(r%a==0) printf("%d",r/a);
		else printf("%d/%d",r,a);
		return;
	}
	else{
		if(!f) printf("+");
		int t=changed3(c);
		if(t==-1) printf("sqrt(%d)",c);
		else d=sqrt(t);
		c/=t;
	}
	if(d!=-1){
		int gcd=__gcd(d,a);
		d/=gcd,a/=gcd;
		if(d<0&&a>0) d=-d,a=-a;
		if(d%a==0) d/=a;
		else if(a%d==0) a/=d;
		if(d!=1) printf("%d*",d);
		printf("sqrt(%d)",c);
	}
	if(a!=1) printf("/%d",a);
}
void solve(){
	int r=b*b-4*a*c;
	if(r<0){
		printf("NO");
		return;
	}
	int ans=max((-b+sqrt(r))/(2*a),(-b-sqrt(r))/(2*a));
	if(ans==max((-b+sqrt(r))/(2*a),(-b-sqrt(r))/(2*a))){
		printf("%d",ans);
		return;
	}
	changed1(-b,2*a);
//	if(((-b+sqrt(r)))/(2*a)<(((-b-sqrt(r)))/(2*a))) a=-a;
	changed2(2*a,b,r);
}
int main(){
	scanf("%d%d",&T,&m);
	while(T--){
		scanf("%d%d%d",&a,&b,&c);
		f=big=0;
		solve();
		printf("\n");
	}
	return 0;
}
2023/10/24 19:50
加载中...