求hack
查看原帖
求hack
1353330
K_J_M楼主2024/7/5 17:56
#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c,deta,tmp,q,p,ans,f;
int get(int x){
	tmp=x,ans=1;
	for(int i=2;i<=sqrt(tmp);i++){
		if(x%i==0){
			int cnt=0;
			while(x%i==0){
				x/=i;
				cnt++;
			}
			ans*=int(pow(i,cnt/2));
		}
	}
	return ans;
}
int main(){
	cin>>t>>m;
	while(t--){
		cin>>a>>b>>c;
		deta=b*b-4*a*c;
		if(deta<0){
			cout<<"NO"<<endl;
		}else{
			if(deta==0){
				if(b==0){
					cout<<0<<endl;
					continue;
				}
				q=b,p=2*a,f=1;
				if(q<0&&p<0){
					q=-q;
					p=-p;
				}else{
					if(q<0&&p>0){
						q=-q;
						f=0;
					}else{
						if(q>0&&p<0){
							p=-p;
							f=0;
						}
					}
				}
				tmp=__gcd(q,p);
				q/=tmp;
				p/=tmp;
				if(f) cout<<"-";
				if(p==1) cout<<q<<endl;
				else cout<<q<<"/"<<p<<endl;
			}else{
				if(a>0){
					int d=get(deta);
					if(d*d==deta){
						q=d-b;
						p=2*a;
						if(q<0){
							cout<<"-";
							q=-q;
						}
						tmp=__gcd(q,p);
						q/=tmp;
						p/=tmp;
						if(p==1){
							cout<<q<<endl;
						}else{
							if(q==0){
								cout<<0<<endl; 
							}else{
								printf("%d/%d\n",q,p);
							}
						}
					}else{
						deta/=d*d;
						q=b,p=2*a,f=1;
						if(q<0&&p<0){
							q=-q;
							p=-p;
						}else{
							if(q<0&&p>0){
								q=-q;
								f=0;
							}else{
								if(q>0&&p<0){
									p=-p;
									f=0;
								}
							}
						}
						tmp=__gcd(q,p);
						q/=tmp;
						p/=tmp;
						if(p==1){
							if(q!=0){
								if(f) cout<<"-";
								cout<<q<<"+";
							}
						}else{
							if(q!=0){
								if(f) cout<<"-";
								printf("%d/%d+",q,p);
							}
						}
						q=d,p=2*a;
						tmp=__gcd(q,p);
						q/=tmp;
						p/=tmp;
						if(p==1){
							if(q!=1) printf("%d*sqrt(%d)\n",q,deta);
							else printf("sqrt(%d)\n",deta);
						}else{
							if(q!=1) printf("%d*sqrt(%d)/%d\n",q,deta,p);
							else printf("sqrt(%d)/%d\n",deta,p);
						}
					}
				}else{
					a=-a;
					int d=get(deta);
					deta/=d*d;
					int q=b,p=2*a;
					if(q==0){
						q=d,p=2*a;
						int tmp=__gcd(q,p);
						q/=tmp;
						p/=tmp;
						if(p==1){
							if(q!=1) printf("%d*sqrt(%d)\n",q,deta);
							else printf("sqrt(%d)\n",deta);
						}else{
							if(q!=1) printf("%d*sqrt(%d)/%d\n",q,deta,p);
							else printf("sqrt(%d)/%d\n",deta,p);
						}
					}else{
						if(q<0){
							q=-q;
							cout<<"-";
						}
						int tmp=__gcd(q,p);
						q/=tmp;
						p/=tmp;
						if(p==1){
							cout<<q<<"+";
						}else{
							printf("%d/%d+",q,p);
						}
						q=d,p=2*a;
						tmp=__gcd(q,p);
						q/=tmp;
						p/=tmp;
						if(p==1){
							if(q!=1) printf("%d*sqrt(%d)\n",q,deta);
							else printf("sqrt(%d)\n",deta);
						}else{
							if(q!=1) printf("%d*sqrt(%d)/%d\n",q,deta,p);
							else printf("sqrt(%d)/%d\n",deta,p);
						}
					}
				}
			}
		}
	}
	return 0;
}

A了第一个点 10pts

2024/7/5 17:56
加载中...