社区讨论
求助 急!!!
P9750[CSP-J 2023] 一元二次方程参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m1m6d4cf
- 此快照首次捕获于
- 2024/09/28 21:15 去年
- 此快照最后确认于
- 2025/11/04 18:33 4 个月前
超绝模拟
谢谢帮查
CPP#include<bits/stdc++.h>
using namespace std;
int T,M;
int a,b,c,d;
int gcd(int m,int n){
if(m%n==0) return n;
return gcd(n,m%n);
}
bool isqrt(int a){
for(int i=sqrt(a)+2;i>=sqrt(a)-2;i--){
if(i*i==a) return 1;
}
return 0;
}
int xs(int a){
int sum=1,e=a;
for(int i=a;i>=1&&e!=1;i--){
if(isqrt(i)&&a%i==0){
sum*=sqrt(i);
e/=i;
}
}
return sum;
}
int bkfs(int a){
int e=a;
for(int i=a;i>=1&&e!=1;i--) if(isqrt(i)&&a%i==0) e/=i;
return e;
}
void step1(int a,int b,int c,int d){
int sum=gcd(-b,2*a);
int p=-b/sum,q=(2*a)/sum;
if(q==1) printf("%d\n",p);
else{
if(q<0) printf("%d/%d\n",-p,-q);
else printf("%d/%d\n",-p,-q);
}
}
void step2(int a,int b,int c,int d){
if(isqrt(d)){
d=sqrt(d);
int p=-b+d,q=2*a;
int sum=gcd(p,q);
p/=sum;
q/=sum;
if(q==1) printf("%d\n",p);
else{
if(q<0) printf("%d/%d\n",-p,-q);
else printf("%d/%d\n",-p,-q);
}
}
else{
int q=2*a,p1=-b,p2=xs(d),p3=bkfs(d),qq=2*a;
if(p1){
int sum=gcd(q,p1),sumq=q;
p1/=sum;
sumq/=q;
if(sumq==1) printf("%d+",p1);
else{
if(q<0) printf("%d/%d\n",-p1,-q);
else printf("%d/%d\n",-p1,-q);
}
}
int sum=gcd(p2,qq);
p2/=sum;
qq/=sum;
if(p2==qq&&qq==1) printf("sqrt(%d)\n",p3);
else if(qq==1) printf("%d*sqrt(%d)\n",p2,p3);
else if(p2==1) printf("sqrt(%d)/%d\n",p3,p2);
else printf("%d*sqrt(%d)/%d\n",p2,p3,qq);
}
}
int main(){
scanf("%d%d",&T,&M);
for(int i=1;i<=T;i++){
scanf("%d%d%d",&a,&b,&c);
d=b*b-4*a*c;
if(d<0) printf("NO\n");
else if(d==0) step1(a,b,c,d);
else step2(a,b,c,d);
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...