社区讨论

求助! 70

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@m1n8y4ef
此快照首次捕获于
2024/09/29 15:15
去年
此快照最后确认于
2025/11/04 18:32
4 个月前
查看原帖
代码如下(码风勿喷)
CPP
#include <bits/stdc++.h>
using namespace std;
int t,m;
int a,b,c;
int main() {
	//freopen ("P9750_2.in","r",stdin);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> t >> m;
	while(t--) {
		cin >> a >> b >> c;
		int det=b*b-4*a*c;
		if(a<0) a*=-1,b*=-1,c*=-1;
		if(det<0) {
			cout << "NO\n";
			continue;
		}
		int x=sqrt(det);
		if(x*x==det) {
			int y=x-b;
			if(y%(2*a)==0) cout << y/(2*a) <<"\n";
			else {
				int z=__gcd(y,2*a);
				cout << y/z << '/' << 2*a/z <<"\n";
			}
			continue;
		}
		int i=2,q=2;
		while(i*i<det) {
			if(det%(i*i)==0) q=i;
			i++;
		}
		int z=__gcd(abs(-b),abs(2*a));
		if(-b<0&&2*a<0) z*=-1;
		if(b!=0){
			cout << -b/z;
			if(2*a!=z) cout << "/" << 2*a/z ;
			cout << '+';
		}
		if(det%(q*q)==0){
			z=__gcd(q,2*a);
			if(q!=z) cout << q/z << '*';
			cout << "sqrt(" << det/(q*q) << ")";
			if(z!=a*2) cout << '/' << 2*a/z;
			cout <<"\n";
		}
		else{
			cout << "sqrt(" << det << ")/" << 2*a << '\n';
		}
	}
	return 0;
}

回复

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

正在加载回复...