CSP-J T3 10分,求调
  • 板块学术版
  • 楼主CaiZi
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/22 09:48
  • 上次更新2023/11/2 12:00:35
查看原帖
CSP-J T3 10分,求调
728853
CaiZi楼主2023/10/22 09:48

10分记录,样例能过,是有什么未考虑到的吗?

ans函数用于将两个数化简。

#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c,n,p,q,z,g;
double d;
bool sb(){
	d=sqrt(n);
	if(floor(d)==ceil(d)){
		z=int(d);
		return true;
	}
	else return false;
}
void ans(){
	q=2*a;
	g=__gcd(abs(p),abs(q));
	p/=g;
	q/=g;
	if(q<0){
		p=-p;
		q=-q;
	}
	return;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>t>>m;
	for(int i=1;i<=t;i++){
		cin>>a>>b>>c;
		n=b*b-4*a*c;
		if(n<0){
			cout<<"NO";
		}
		else{
			if(sb()){
				sb();
				p=max(-b+z,-b-z);
				ans();
				cout<<p;
				if(q!=1){
					cout<<"/"<<q;
				}
			}
			else{
				p=-b;
				if(p!=0){
					ans();
					cout<<p;
					if(q!=1){
						cout<<"/"<<q;
					}
					cout<<"+";
				}
				q=2*a;
				p=1;
				for(int i=sqrt(n);i>=2;i--){
					if(n%(i*i)==0){
						p=i;
						break;
					}
				}
				n=n/(p*p);
				ans();
				if(p!=1)cout<<p<<"*";
				cout<<"sqrt("<<n<<")";
				if(q!=1)cout<<"/"<<q;
			}
		}
		cout<<"\n";
	}
	return 0;
}
2023/10/22 09:48
加载中...