普及 T3 一元二次方程 50 WA
  • 板块灌水区
  • 楼主qinghaipeng
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/21 21:30
  • 上次更新2023/11/2 12:07:42
查看原帖
普及 T3 一元二次方程 50 WA
690333
qinghaipeng楼主2023/10/21 21:30

RT

虽然我知道哪里要改,但是求为dalao来指导亿下。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
//#define int long long
#define F(i,j,n) for(register int i=j;i<=n;++i)
#define bug puts("liupei")
#define rt return
using namespace std;
const bool debug=0;
const int N=1e5+50;
int T,M;
signed main() {
	freopen("uqe.in","r",stdin);
	freopen("uqe.out","w",stdout);
	scanf("%d%d",&T,&M);//M 貌似没什么用 
	register int a,b,c,dt;
	F(_,1,T) {
		scanf("%d%d%d",&a,&b,&c);
		dt=b*b-4*a*c;
		if(a<0) {//使一次项系数 >0 
			a=-a;
			b=-b;
			c=-c;
		}
		if(debug) {
			printf("ANS=");
		}
		if(dt<0) {
			printf("NO");
		}
		if(dt==0) { //只有一个跟
			if(sqrt(dt)*sqrt(dt)==dt) { //delta 完全平方数
				if((-b+int(sqrt(dt))) %(2*a)==0) {
					cout<<(-b+sqrt(dt))/(2/a);
				} else {
					if(dt) {
						register int t=dt,st=sqrt(t),d=1;
						F(i,2,st) {
							while(t%(i*i)==0) {
								t/=i*i;
								d*=i;
							}//把平方项移出去
						}
						dt=t;//剩下不是平方项的
						int gc_=__gcd(-b,2*a),gc__=__gcd(d,2*a);
						if((-b)%(2*a)==0)cout<<(-b)/(2*a);
						else {
							if((2*a)/gc_<0) {
								gc__*=-1;
								gc_*=-1;
							}
							cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
						}
						if(d/gc__>0)cout<<"+";
						else cout<<"-";
						if((d)%(2*a)==0)cout<<(d)/(2*a);
						else cout<<(d)/gc__;
						if(gc__!=1)cout<<"/"<<(2*a)/gc__;
						puts("");
					} else {
						int gc_=__gcd(-b,2*a);
						if((-b)%(2*a)==0)cout<<(-b)/(2*a);
						else {
							if((2*a)/gc_<0) {
								gc_*=-1;
							}
							cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
						}
					}
				}
			} else {
				if((-b+int(sqrt(dt)))%(2*a)==0) {
					cout<<(-b+sqrt(dt))/(2*a);
				} else {
					register int t=dt,st=sqrt(t),d=1;
					F(i,2,st) {
						while(t%(i*i)==0) {
							t/=i*i;
							d*=i;
						}//把平方项移出去
					}
					dt=t;//剩下不是平方项的
					int gc_=__gcd(-b,2*a),gc__=__gcd(d,2*a);
					if((-b)%(2*a)==0)cout<<(-b)/(2*a);
					else cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
					if(d/gc__>0)cout<<"+";
					else cout<<"-";
					if((d)%(2*a)==0)cout<<(d)/(2*a);
					else cout<<(d)/gc__;
					if(dt!=1)cout<<"*sqrt("<<dt<<")";
					if(gc__!=1)cout<<"/"<<(2*a)/gc__;
					puts("");
				}
			}
		}
		if(dt>0) { //有 2 个跟
			if(sqrt(dt)*sqrt(dt)==dt) { //delta 完全平方数
				if((-b+int(sqrt(dt))) %(2*a)==0) {
					cout<<(-b+sqrt(dt))/(2/a);
				} else {
					if(dt!=0) {
						register int t=dt,st=sqrt(t),d=1;
						F(i,2,st+1) {
							while(t%(i*i)==0) {
								t/=i*i;
								d*=i;
							}//把平方项移出去
						}
						dt=t;//剩下不是平方项的
//					if(debug)cout<<" DDD "<<dt<<" DDD ";
						int gc_=__gcd(-b,2*a),gc__=__gcd(d,2*a);
						if((-b)%(2*a)==0) {
							if(b!=0)
								cout<<(-b)/(2*a);
							else
								;
						} else {
							if((2*a)/gc_<0) {
								gc__*=-1;
								gc_*=-1;
							}
							cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
						}
						if(d/gc__>0&&b!=0)cout<<"+";
						else if(b!=0)cout<<"-";
						if((d)%(2*a)==0)cout<<(d)/(2*a);
						else cout<<(d)/gc__;
						if(gc__!=1)cout<<"/"<<(2*a)/gc__;
					} else {
						int gc_=__gcd(-b,2*a);
						if((-b)%(2*a)==0)cout<<(-b)/(2*a);
						else {
							if((2*a)/gc_<0) {
								gc_*=-1;
							}
							cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
						}
					}
				}
			} else {
				if((-b+int(sqrt(dt)))%(2*a)==0) {
					cout<<(-b+sqrt(dt))/(2*a);
				} else {
					register int t=dt,st=sqrt(t),d=1;
					F(i,2,st) {
						while(t%(i*i)==0) {
							t/=i*i;
							d*=i;
						}//把平方项移出去
					}
					dt=t;//剩下不是平方项的
					int gc_=__gcd(-b,2*a),gc__=__gcd(d,2*a);
					if((2*a)/gc_<0) {
						gc__*=-1;
						gc_*=-1;
					}
					if((-b)%(2*a)==0)cout<<(-b)/(2*a);
					else{
						cout<<(-b)/gc_<<"/"<<(2*a)/gc_;
					}
					if(d*d==dt){
						cout<<(d)/gc__;
					}
					if(d/gc__>0)cout<<"+";
					else cout<<"-";
					if((d)%(2*a)==0)cout<<(d)/(2*a);
					else cout<<(d)/gc__;
					if(dt!=1)cout<<"*sqrt("<<dt<<")";
				}
			}
		}
		puts("");//统一换行
	}
	rt 0;
}
/*
in

9 1000
1 -1 0
-1 -1 -1
1 -2 1
1 5 4
4 4 1
1 0 -432
1 -3 1
2 -4 1
1 7 1

out

1
NO
1
-1
-1/2
12*sqrt(3)
3/2+sqrt(5)/2
1+sqrt(2)/2
-7/2+3*sqrt(5)/2

*/
2023/10/21 21:30
加载中...