社区讨论
CSP-J T3正(歪?)解
灌水区参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo0uu2y7
- 此快照首次捕获于
- 2023/10/22 10:33 2 年前
- 此快照最后确认于
- 2023/11/02 12:14 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
struct num{
int p,q;
void yue(){
if(q<0){
q*=-1,p*=-1;
}
int t=abs(__gcd(p,q));
p/=t,q/=t;
return ;
}
void printnum(){
if(p==q)cout << 1;
else if(q==1)cout << p;
else cout << p << '/' << q;
return;
}
};
struct root{
num q1,q2;
int gen;
void get(){
for(int i=2;i*i<=gen;i++){
while(gen%(i*i)==0){
gen/=(i*i);
q2.p*=i;
}
}
q2.yue();
}
void printroot(){
if(q2.p==q2.q)cout << "sqrt(" << gen << ")";
else if(q2.q==1)cout << q2.p << "*sqrt(" << gen << ")";
else if(q2.p==1)cout << "sqrt(" << gen << ")/" << q2.q;
else cout << q2.p << "*sqrt(" << gen << ")/" << q2.q;
cout << endl;
}
};
void solve(){
int a,b,c;
cin >> a >> b >> c;
int del=b*b-(4*a*c);
if(del<0){
cout << "NO" << endl;
return;
}
if((int)(sqrt(del))*(int)(sqrt(del))==del){
num ans;
if((0-b+(int)(sqrt(del))*1.0)/(2*a)>(0-b-(int)(sqrt(del))*1.0)/(2*a)){
ans.p = 0-b+sqrt(del);
}else{
ans.p = 0-b-sqrt(del);
}
ans.q=2*a;
ans.yue();
ans.printnum();
cout <<endl;
return;
}
root x;
x.q1.p=-b;
x.q1.q=2*a;
x.q1.yue() ;
x.q2.q = 2*a;
x.gen = del;
if((0-b+(sqrt(del))*1.0)/(2*a)>(0-b-(sqrt(del))*1.0)/(2*a)){
x.q2.p = 1;
}else{
x.q2.p = -1;
}
x.get();
if(x.q1.p!=0){
x.q1.printnum();
cout << '+';
}
x.printroot();
return;
}
int q,m;
int main(){
cin >> q >> m;
while(q--){
solve();
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...