CSP-J T3 爆0代码求调
  • 板块学术版
  • 楼主Rice_Demon_King
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/23 23:26
  • 上次更新2023/10/24 12:45:23
查看原帖
CSP-J T3 爆0代码求调
680022
Rice_Demon_King楼主2023/10/23 23:26

注:该代码已删除freopen().

#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c,tong[100001],f1,q1=1,delta1;
int pd(int d){
	if(d<2) return 0;
	if(d==2) return 1;
	for(int i=2;i<=sqrt(d);i++){
		if(d%i==0) return 0;
	}
	return 1;
}
void huajian(){
	if(f1==1) return ;
	if(delta1==1){
		f1=1;
		return ;
	} 
	if(pd(delta1)==1){
		if(tong[delta1]==1) q1=q1*delta1;
		f1=1;
		return ;
	}
	for(int i=2;i<=sqrt(delta1);i++){
		if(delta1%i==0&&pd(i)==1){
			tong[i]++;
			delta1=delta1/i;
			if(tong[i]==2){
				q1=q1*i;
				tong[i]=0;
			}
			huajian();
		}
	}
	return ;
}
void cout1(int flag,int zi,int mu){
	if(flag==1) cout<<"-";
	cout<<zi;
	if(mu!=1) cout<<"/"<<mu;
}
void cout2(int zi,int mu,int delta){
	cout<<zi<<"*sqrt("<<delta<<")/"<<mu<<endl;
}
void fenshu(int zi,int mu,int cyh,int delta){
	int flag;
	if(zi<0&&mu>0){
		flag=1;
		zi=-zi;
	}
	if(zi>0&&mu<0){
		flag=1;
		mu=-mu;
	} 
	if(zi<0&&mu<0){
		zi=-zi;
		mu=-mu;
	}
	int f[100001],tmp=1;
	for(int i=2;i<=zi;i++){
		if(zi%i==0&&pd(i)==1){
			f[tmp]=i;
			tmp++;
		}
	}
	if(zi==2){
		f[tmp]=2;
		tmp++;
	}
	for(int i=1;i<tmp;i++){
		if(mu%f[i]==0&&zi%f[i]==0){
			mu=mu/f[i];
			zi=zi/f[i];
			i--;
			continue;
		}
	}
	if(cyh==0) cout1(flag,zi,mu);
	else cout2(zi,mu,delta);
}
int main(){
	cin>>t>>m;
	while(t--){
		memset(tong,0,sizeof(tong));
		q1=1;
		f1=0;
		cin>>a>>b>>c;
		int delta=b*b-4*a*c;
		if(delta<0){
			cout<<"NO"<<endl;
			continue;
		}
		int t=sqrt(delta);
		if(t*t==delta){
			if(a>0){
				fenshu(-b+t,2*a,0,0);
				cout<<endl;	
			} 
			else{
				fenshu(-b-t,2*a,0,0);
				cout<<endl;	
			}
		}
		else{
			if(b!=0){
				fenshu(-b,2*a,0,0);
				cout<<"+";
			}
			delta1=delta;
			huajian();
			delta=(delta/q1)/q1;
			if(q1==abs(2*a)) cout<<"sqrt("<<delta<<")"<<endl;
			else if(q1%abs(2*a)==0) cout<<q1/abs(2*a)<<"*"<<"sqrt("<<delta<<")"<<endl;
			else if(abs(2*a)%q1==0) cout<<"sqrt("<<delta<<")/"<<abs(2*a)/q1<<endl;
			else fenshu(q1,abs(2*a),1,delta);
		}
	}
	return 0;
}

样例能过(没去行末空格),为啥爆0?

2023/10/23 23:26
加载中...