这去年j组的大模拟可真难调啊,就这一题干了我有一个小时了,编码20分钟,调了40分钟呜呜
3 个赞
我才60。好心人帮蒟蒻调一下
2 个赞
这洛谷是怎么调的?
2 个赞
你代码发下我看看
2 个赞
#include <bits/stdc++.h>
using namespace std;
bool is_sqrt(int x){
int p=sqrt(x);
if(x==p*p){
return true;
}
return false;
}
void f(int t,int a2){
if(t%a2==0){
cout<<t/a2;
}else{
int q;
q=t;
if(t<0){
t=-t;
}
//cout<<t<<" "<<a2;
int p=__gcd(t,a2);
t/=p;
a2/=p;
if(q<0){
cout<<"-"<<t<<"/"<<a2;
}else{
cout<<t<<"/"<<a2;
}
}
}
int check_sqrt(int x){
int sum=1;
int m=x;
for(int i=2;i<=sqrt(m);i++){
if(x%i==0){
int t=0;
while(x%i==0){
x/=i;
t++;
}
if(t>=2){
while(t>=2){
t-=2;
sum*=i;
}
}
}
}
return sum;
}
int main(){
int t,m;
cin>>t>>m;
while(t--){
int a,b,c;
cin>>a>>b>>c;
if(a<0) a=-a,b=-b,c=-c;
int delta=b*b-4*a*c;
if(delta<0){
cout<<"NO"<<endl;
continue;
}
if(is_sqrt(delta)==true){
int s=sqrt(delta);
int t=-b+s;
int a2=2*a;
f(t,a2);
cout<<endl;
}else{
int t=-b;
int a2=2*a;
if(t!=0&&a2!=0){
f(t,a2);
cout<<"+";
}
int l=check_sqrt(delta);
if(l!=1){
int z=l*l;
if(l%a2==0||a2%l==0){
int p=__gcd(l,a2);
l/=p;
a2/=p;
if(l!=0&&l!=1) cout<<l<<"*";
cout<<"sqrt("<<delta/z<<")";
if(a2!=1) cout<<"/"<<a2;
cout<<endl;
}else{
cout<<l<<"*sqrt("<<delta/z<<")";
cout<<"/"<<a2<<endl;
}
}else{
cout<<"sqrt("<<delta<<")";
cout<<"/"<<2*a<<endl;
}
}
}
return 0;
}
2 个赞
光看太麻烦了,我跟你说我调的时候重要的几点吧
1.不能出现1*sqrt()这种形式,所以得特判
2.如果不存在sqrt()那么可以q1 q2一起算,具体是直接q1+=q2但也要注意正负号的问题
3.判断是否有根式和分式
2 个赞
调不出来的话,我写个对拍帮你拍一下吧
2 个赞
拍出来了,这问题有点难崩
2 个赞
这。。。
2 个赞
编码这么快/jy
我写了差不多一个小时(虽然边写边摸鱼)qwq
调试还是比较快的,基本算一遍过
1 个赞
谢谢,改出来了