社区讨论
J T3 求调
学术版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lnzuoa5n
- 此快照首次捕获于
- 2023/10/21 17:41 2 年前
- 此快照最后确认于
- 2023/11/02 12:13 2 年前
CPP
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int delta(int a,int b,int c){
return b*b-4*a*c;
}
int gcd(int a,int b){
return __gcd(a,b);
}
bool check(int delta){
if(pow(int(sqrt(delta)),2)==delta){
return true;
}
else{
return false;
}
}
void UQE(int a,int b,int c,int delta){
if(check(delta)){
int up1=-b+sqrt(delta);
int up2=-b-sqrt(delta);
int up=max(up1,up2);
int down=2*a;
if(up<0&&down>0){
cout<<"-";
up=-up;
}
if(down<0&&up>0){
cout<<"-";
down=-down;
}
if(up<0&&down<0){
up=-up;
down=-down;
}
if(up==0){
cout<<0<<endl;
return;
}
int k=gcd(up,down);
up/=k;
down/=k;
if(down==1){
cout<<up<<endl;
return;
}
cout<<up<<"/"<<down<<endl;
return;
}
else{
int up=-b;
int down=2*a;
int down1=down;
if(up<0&&a>0){
cout<<"-";
up=-up;
}
if(a<0&&up>0){
cout<<"-";
down=-down;
}
if(a<0&&up<0){
up=-up;
down=-down;
}
if(up!=0){
int k=gcd(up,down);
up/=k;
down/=k;
if(down==1){
cout<<up<<"+";
}
else{
cout<<up<<"/"<<down<<"+";
}
}
int q2;
for(int i=1;i*i<=delta;i++){
if(delta%(i*i)==0){
q2=i;
}
}
// cerr<<"q2="<<q2<<endl;
int r=delta/(q2*q2);
int k1=gcd(q2,down1);
q2/=k1;
down1/=k1;
if(q2==1&&down1==1){
printf("sqrt(%d)\n",r);
return;
}
else if(q2==1&&down1!=1){
printf("sqrt(%d)/%d\n",r,down1);
}
else if(down1==1){
printf("%d*sqrt(%d)\n",q2,r);
return;
}
else{
printf("%d*sqrt(%d)/%d\n",q2,r,down1);
return;
}
}
}
int main(){
int t,m;
cin>>t>>m;
while(t--){
int a,b,c;
cin>>a>>b>>c;
if(delta(a,b,c)<0){
cout<<"NO"<<endl;
}
else{
UQE(a,b,c,delta(a,b,c));
}
}
return 0;
}
样例都对,但是只有10pts。
请问是什么原因?大佬求助!!!
回复
共 3 条回复,欢迎继续交流。
正在加载回复...