警示后人!!!(虽然几乎不会有人犯的吧qwq)
查看原帖
警示后人!!!(虽然几乎不会有人犯的吧qwq)
1045930
Liuliwei123楼主2024/8/24 21:42

如果你出现了只过了样例1,5,6的情况,请注视这句代码;

cout<<"No";

而正确的代码是:

cout<<"NO";

就因为这个 No 没有大写,让我查了半天QAQ

顺便附上我平生以来写的最简洁的AC代码

#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y){
	return y==0?x:gcd(y,x%y);
}
int maxmul(int a,int b,int option){
	return option<0?min(a,b):max(a,b);
}
void cutnum(int &a,int &b){
	int g=gcd(a,b);
	a/=g;b/=g;
	if(b<0){a*=-1;b*=-1;}
}
int maxpow(int n){
	for(int i=2;i*i<=n;i++)
		if(n%(i*i)==0) return i*maxpow(n/i/i);
	return 1;
}
int main(){
	int T,M;
	cin>>T>>M;
	while(T--){
		int a,b,c;
		cin>>a>>b>>c;
		int dl=b*b-4*a*c;
		if(dl<0){
			cout<<"NO"<<endl;
			continue;
		}
		int d=sqrt(dl);
		if(d*d==dl){//有理数 
			int p1=-b+d,p2=-b-d,q=2*a;
			int x=maxmul(p1,p2,q);
			cutnum(x,q);
			if(q==1) cout<<x<<endl;
			else cout<<x<<"/"<<q<<endl;
		}else{//无理数 
			int mx=maxpow(dl),q1=2*a,q2=2*a,x=-b;
			dl/=mx*mx;
			cutnum(x,q1);cutnum(mx,q2);
			if(q1==1&&x!=0) cout<<x<<"+";
			else if(x!=0) cout<<x<<"/"<<q1<<"+";
			if(mx<0) mx*=-1; 
			if(mx!=1) cout<<mx<<"*";
			cout<<"sqrt("<<dl<<")";
			if(q2!=1) cout<<"/"<<q2;
			cout<<endl;
		}
	}
	return 0;
}

2024/8/24 21:42
加载中...