社区讨论

RE但是 程序整体没问题 急急急!!!

P9750[CSP-J 2023] 一元二次方程参与者 5已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@m1npt7uy
此快照首次捕获于
2024/09/29 23:07
去年
此快照最后确认于
2025/11/04 18:29
4 个月前
查看原帖
谢谢帮助!
CPP
#include<bits/stdc++.h>
using namespace std;
int T,M;
int a,b,c,d;
int gcd(int m,int n){
	if(m%n==0) return n;
	return gcd(n,m%n);
}
void step1(int a,int b,int c,int d){
	int p=-b,q=2*a;
	int sum=gcd(abs(q),abs(p));
	p=p/sum;
	q=q/sum;
	if(q<0){
		q=-q;
		p=-p;
	}
	if(q==1) printf("%d\n",p);
	else printf("%d/%d\n",p,q);
}
void step2(int a,int b,int c,int d){
	int q=2*a,p=-b,d2=(int)sqrt(d);
	if(d2*d2==d){
		if(q>0) p+=d2;
		else p-=d2;
		int sum=gcd(abs(p),abs(q));
		p/=sum;
		q/=sum;
		if(q<0){
			q=-q;
			p=-p;
		}
		if(q==1) printf("%d\n",p);
		else printf("%d/%d\n",p,q);
	}
	else{
		int sum=gcd(abs(q),abs(p));
		p/=sum;
		q/=sum;
		if(q<0){
			q=-q;
			p=-p;
		}
		if(p!=0){
			if(q==1) printf("%d+",p);
			else printf("%d/%d+",p,q);
		}
		p=1;
		q=abs(2*a);
		int bkf=0;
		for(int j=d2;j>=1;j--){
			if(d%(j*j)==0){
				p*=j;
				bkf=d/(j*j);
				break;
			}
		}
		sum=gcd(abs(q),abs(p));
		q/=sum;
		p/=sum;
		if(q<0){
			p=-p;
			q=-q;
		}
		if(p==q) printf("sqrt(%d)\n",bkf);
		else if(q==1) printf("%d*sqrt(%d)\n",p,bkf);
		else if(p==1) printf("sqrt(%d)/%d\n",bkf,q);
		else printf("%d*sqrt(%d)/%d\n",p,bkf,q);
	}
}
int main(){
	scanf("%d%d",&T,&M);
	for(int i=1;i<=T;i++){
		scanf("%d%d%d",&a,&b,&c);
		d=b*b-4*a*c;
		if(d<0) printf("NO\n");
		else if(d==0) step1(a,b,c,d);
		else step2(a,b,c,d);
	}
	return 0;
} 

回复

4 条回复,欢迎继续交流。

正在加载回复...