社区讨论

CSP-J T3求hack

学术版参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lo4ekzsz
此快照首次捕获于
2023/10/24 22:09
2 年前
此快照最后确认于
2023/10/25 09:22
2 年前
查看原帖
非常神奇,小图灵20分,洛谷60分,云斗100分?
代码如下:
C
#include <bits/stdc++.h>
using namespace std;
int t=0,m=0,a=0,b=0,c=0,d=0;
int main(){
	scanf("%d%d",&t,&m);
	while(t--){
		scanf("%d%d%d",&a,&b,&c);
		int deta=b*b-4*a*c;
		if(deta<0){
			printf("NO\n");
			continue;
		}
		if(b==0 and deta!=0 and sqrt(deta)!=int(sqrt(deta))) d=1;
		else if(b==0 and deta==0) printf("0\n");
		else if(sqrt(deta)!=int(sqrt(deta))){
			if(b%(2*a)==0) cout << -b/(2*a);
			else{
				int gc=__gcd(abs(b),abs(2*a));
				if((b<0 and a<0) or (b>0 and a>0)) cout << "-" << abs(b)/gc << "/" << abs(2*a)/gc;
				else cout << abs(b)/gc << "/" << abs(2*a)/gc;
			}
		}
		else{
			b=-b;
			if(a<0) b-=sqrt(deta);
			else b+=sqrt(deta);
			if(b%(2*a)==0) cout << b/(2*a);
			else{
				int gc=__gcd(abs(b),abs(2*a));
				if((b<0 and a<0) or (b>0 and a>0)) cout << abs(b)/gc << "/" << abs(2*a)/gc;
				else cout << "-" << abs(b)/gc << "/" << abs(2*a)/gc;
			}
		}
		if(deta>0 and sqrt(deta)!=int(sqrt(deta))){
			if(b!=0)cout << "+";
			int u=0;
			for(int i=sqrt(deta);i>=1;i--){
				if(deta%(i*i)==0){
					u=i;
					deta/=(i*i);
					break;
				}
			}
			if(u<0) u=-u;
			if(a<0) a=-a;
			int gc=__gcd(abs(u),abs(2*a)); 
			if(u==2*a) cout << "sqrt(" << deta << ")";
			else if(u%(2*a)==0) cout << u/(2*a) << "*" << "sqrt(" << deta << ")";
			else if(u/gc==1) cout << "sqrt(" << deta << ")/" << 2*a/gc;
			else cout << u/gc << "*" << "sqrt(" << deta << ")/" << 2*a/gc;
		}
		cout << "\n";
	}
	return 0;
} 

回复

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

正在加载回复...