社区讨论

10pts WA & TLE 求调

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

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@m05de05r
此快照首次捕获于
2024/08/22 22:20
2 年前
此快照最后确认于
2025/11/04 22:42
4 个月前
查看原帖
大样例没过
CPP
#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define endl '\n'
#define itn int
#define pi pair<int,int>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
using namespace std;
const int MOD1=1e9+7;
const int MOD2=998244353;
const int N=1e5+5;
int T,M,a,b,c;
void frac(int p,int q){
	p=abs(p);
	q=abs(q);
	int gcdd=__gcd(p,q);
	p/=gcdd;
	q/=gcdd;
	if(q==1)cout<<p;
	else if(p==q)cout<<1;
	else cout<<p<<'/'<<q;
}
inline void Solve(){
	cin>>T>>M;
	while(T--){
		cin>>a>>b>>c;
		int delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO"<<endl;
		}
		else{
			double sqd=sqrt(delta);
			if(delta==0){
				int p=-b;
				int q=2*a;
				double cf=p*1.0/q;
				//cout<<p<<' '<<q<<' '<<cf<<endl;
				if(cf==int(cf)){
					cout<<int(cf)<<endl;
				}
				else{
					if(p*q<0)
						cout<<'-';
					frac(p,q);
					cout<<endl;
				}
			}
			else{
				if(int(sqd)==sqd){
					int p=sqd-b;
					int q=2*a;
					double cf=p*1.0/q;
					if(cf==int(cf)){
						cout<<int(cf)<<endl;
					}
					else{
						if(p*q<0)
							cout<<'-';
						frac(p,q);
						cout<<endl;
					}
				}
				else{
					int _q1=-b;
					int _q2,r;
					for(_q2=sqrt(delta);_q2>=1;_q2--){
						if(delta%(_q2*_q2)==0){
							r=delta/_q2/_q2;
							break;
						}
					}
					if(_q1!=0){
						int q11=_q1;
						int q12=2*a;
						if(q11*q12<0)
							cout<<'-';
						frac(q11,q12);
						cout<<'+';
					}
					int q21=_q2;
					int q22=2*a;
					if(q21==q22){
						cout<<"sqrt("<<r<<")\n";
					}
					else{
						double cf=q21*1.0/q22;
						if(int(cf)==cf){
							if(abs(int(cf))!=1)
								cout<<abs((int)cf)<<"*sqrt("<<r<<")\n";
							else
								cout<<"sqrt("<<r<<")\n";
						}
						else{
							double _cf=q22*1.0/q21;
							if(int(_cf)==_cf){
								cout<<"sqrt("<<r<<")";
								if(abs((int)_cf)!=1)
									cout<<abs((int)cf)<<endl;
							}
							else{
								int C,D;
								for(D=2;;D++){
									double _C=_q2*D*1.0/2/a;
									if(int(_C)==_C and __gcd(int(_C),D)==1){
										C=_C;
										break;
									}
								}
								cout<<C<<"*sqrt("<<r<<")/"<<D<<endl;
							}
						}
					}
				}
			}
		}
	}
}
int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    //freopen("uqe2.in","r",stdin);
    //freopen("uqe2.out","w",stdout);
    int T=1;
    //cin>>T;
    while(T--)
    	Solve();
    return 0;
}

回复

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

正在加载回复...