终于调出来了

这去年j组的大模拟可真难调啊,就这一题干了我有一个小时了,编码20分钟,调了40分钟呜呜

3 个赞

我才60。好心人帮蒟蒻调一下

2 个赞

这洛谷是怎么调的?

2 个赞

你代码发下我看看

2 个赞
#include <bits/stdc++.h>
using namespace std;
bool is_sqrt(int x){
	int p=sqrt(x);
	if(x==p*p){
		return true;
	}
	return false;
}
void f(int t,int a2){
	if(t%a2==0){
		cout<<t/a2;
	}else{
		int q;
		q=t;
		if(t<0){
			t=-t;
		}
		//cout<<t<<" "<<a2;
		int p=__gcd(t,a2);
		t/=p;
		a2/=p;
		if(q<0){
			cout<<"-"<<t<<"/"<<a2;
		}else{
			cout<<t<<"/"<<a2;
		}
					
	}
}
int check_sqrt(int x){
	int sum=1;
	int m=x;
	for(int i=2;i<=sqrt(m);i++){
		if(x%i==0){
			int t=0;
			while(x%i==0){
				x/=i;
				t++;
			}
			if(t>=2){
				while(t>=2){
					t-=2;
					sum*=i;
				}
			}
		}
	}
	return sum;
}
int main(){
	int t,m;
	cin>>t>>m;
	while(t--){
		int a,b,c;
		cin>>a>>b>>c;
		if(a<0) a=-a,b=-b,c=-c;
		int delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO"<<endl;
			continue;
		}
		if(is_sqrt(delta)==true){
			int s=sqrt(delta);
			int t=-b+s;
			int a2=2*a;
			f(t,a2);
			cout<<endl;
		}else{
			int t=-b;
			int a2=2*a;
			if(t!=0&&a2!=0){
				f(t,a2);
				cout<<"+";
			}
			int l=check_sqrt(delta);
			if(l!=1){
				int z=l*l;
				if(l%a2==0||a2%l==0){
					int p=__gcd(l,a2);
					l/=p;
					a2/=p;
					if(l!=0&&l!=1) cout<<l<<"*";
					cout<<"sqrt("<<delta/z<<")";
					if(a2!=1) cout<<"/"<<a2;
					cout<<endl;
				}else{
					cout<<l<<"*sqrt("<<delta/z<<")";
					cout<<"/"<<a2<<endl;
				}
			}else{
				cout<<"sqrt("<<delta<<")";
				cout<<"/"<<2*a<<endl;
			}
		}
	}
	return 0;
}
2 个赞

光看太麻烦了,我跟你说我调的时候重要的几点吧
1.不能出现1*sqrt()这种形式,所以得特判
2.如果不存在sqrt()那么可以q1 q2一起算,具体是直接q1+=q2但也要注意正负号的问题
3.判断是否有根式和分式

2 个赞

调不出来的话,我写个对拍帮你拍一下吧

2 个赞

屏幕截图 2024-10-15 200959
拍出来了,这问题有点难崩

2 个赞

这。。。

2 个赞

编码这么快/jy

我写了差不多一个小时(虽然边写边摸鱼)qwq

调试还是比较快的,基本算一遍过

1 个赞

谢谢,改出来了