三天啊三天,我就调了一堆特殊输出
查看原帖
三天啊三天,我就调了一堆特殊输出
1095004
weigui0472楼主2024/11/26 20:51
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
	while(b!=0)
	{
		a%=b;swap(a,b);
	}return a;
}

int main()
{
	int t,m;cin>>t>>m;
	while(t--)
	{
		int a,b,c,dt,sq1,sq2;cin>>a>>b>>c;
		dt=b*b-4*a*c;
		if(dt<0){printf("NO\n");continue;}
		if(dt==0)
		{
			int u=-b,d=2*a;
			u/=gcd(b,2*a),d/=gcd(b,2*a);
			if(d==1) {printf("%d\n",u);continue;}
			else if(d==-1){printf("%d\n",-u);continue;}
			else if(d>1){printf("%d/%d\n",u,d);continue;}
			else if(d<-1){printf("%d/%d\n",-u,-d);continue;}
		}
		for(int i=1;i*i<=dt;i++) 
		{	
			if(dt%(i*i)==0)
			{sq1=i;sq2=dt/(i*i);}//sqrt(delta)=sq1*sqrt(sq2)
		}
		int lu=b,ld=2*a,ru=sq1,rd=2*a;
		lu/=gcd(b,2*a),ld/=gcd(b,2*a),ru/=gcd(sq1,2*a),rd/=gcd(sq1,2*a);
		lu*=-1;ru=abs(ru);rd=abs(rd);
		if(lu<0&&ld<0) lu=-lu,ld=-ld;
		//预处理
		
		if(sq2==1)
		{
			if(a<0)
			{
				int up=b+sq1,dw=-2*a;
				up/=gcd(b+sq1,-2*a);dw/=gcd(b+sq1,-2*a);
				if(dw==1){printf("%d\n",up);continue;}
				else if(dw==-1){printf("%d\n",-up);continue;}
				else if(dw<-1){printf("%d/%d\n",-up,-dw);continue;}
				else if(dw>1){printf("%d/%d\n",up,dw);continue;}
			}
			else
			{
				int up=sq1-b,dw=2*a;
				up/=gcd(sq1-b,2*a),dw/=gcd(sq1-b,2*a);
				if(dw==1){printf("%d\n",up);continue;}
				else if(dw==-1){printf("%d\n",-up);continue;}
				else if(dw<-1){printf("%d/%d\n",-up,-dw);continue;}
				else if(dw>1){printf("%d/%d\n",up,dw);continue;}
			}
		}
		
		if(lu==0)//如果只有根号一项
		{
			if(ru==1&&rd==1) {printf("sqrt(%d)\n",sq2);continue;}
			if(ru!=1&&rd==1) {printf("%d*sqrt(%d)\n",ru,sq2);continue;}
			if(ru==1&&rd!=1) {printf("sqrt(%d)/%d\n",sq2,rd);continue;}
			if(ru!=1&&rd!=1) {printf("%d*sqrt(%d)/%d\n",ru,sq2,rd);continue;}
		}
		
		
			if(ld==1){printf("%d",lu);}
			else if(lu<0&&ld<0){printf("%d/%d\n",-lu,-ld);}
			else{printf("%d/%d",lu,ld);}
		
		if(ru==1)
		{
			if(rd==1) printf("+sqrt(%d)\n",sq2);
			else printf("+sqrt(%d)/%d\n",sq2,rd);
			continue;
		}
		else if(ru>1) 
		{
			if(rd==1) printf("+%d*sqrt(%d)\n",ru,sq2);
			else printf("+%d*sqrt(%d)/%d\n",ru,sq2,rd);
			continue;
		}
		cout<<endl;
	}
} 

这是唯一一道让我连着调了三天的黄题

2024/11/26 20:51
加载中...