csp-j t3 60pts求调
  • 板块学术版
  • 楼主pig1121
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/22 00:40
  • 上次更新2023/11/2 12:03:14
查看原帖
csp-j t3 60pts求调
924621
pig1121楼主2023/10/22 00:40
#include<iostream>
#define int long long
#define endl '\n'

using namespace std;

void print(int x,int y){
	int ans1=x,ans2=y;
	for(int i=2;i<=ans2;i++){
		while(ans1%i==0&&ans2%i==0)ans1/=i,ans2/=i;
	}
	if(ans2==1)cout<<ans1;
	else cout<<ans1<<'/'<<ans2;
}

void print2(int x,int y,int z){
	int ans1=x,ans2=y;
	for(int i=1;i<=ans2;i++){
		if(ans1%i==0&&ans2%i==0)ans1/=i,ans2/=i;
	}
	if(ans2==1)cout<<ans1<<"*sqrt("<<z<<')';
	else if(ans1==1)cout<<"sqrt("<<z<<")/"<<ans2;
	else cout<<ans1<<"*sqrt("<<z<<")/"<<ans2;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
//	freopen("uqe.in","r",stdin);
//	freopen("uqe.out","w",stdout);
	int t,m;
	cin>>t>>m;
	while(t--){
		int a,b,c;
		cin>>a>>b>>c;
		int delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO"<<endl;
			continue;
		}
		int i1;
		for(i1=1;i1*i1<delta;i1++);
		if(delta==0)i1=0;
		if(i1*i1==delta){
			if(a<0){
				print(b+i1,-2*a);
			}
			else{
				print(-b+i1,2*a);
			}
			cout<<endl;
			continue;
		}
        if(b!=0){
			if(a<0)print(b,-2*a);
			else print(-b,2*a);
			cout<<'+';
		}
		int q2=1;
		for(int i=2;i*i<=delta;i++){
			while(delta%(i*i)==0)delta/=i*i,q2*=i;
		}
        if(a<0)print2(q2,-2*a,delta);
        else print2(q2,2*a,delta);
        cout<<endl;
	}
	return 0;
}

样例没问题,其它带根号的全WA

2023/10/22 00:40
加载中...