社区讨论
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 条回复,欢迎继续交流。
正在加载回复...