社区讨论

求组 CSP-J T3 70

灌水区参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo5631qh
此快照首次捕获于
2023/10/25 10:59
2 年前
此快照最后确认于
2023/10/25 11:50
2 年前
查看原帖
RT,思路没什么好说的,就是膜你。
因为一直没有发现问题,也造不出 HACK,特来求助各位大佬,看看有没有大佬能找到蒟蒻的错误或者提供一个 HACK!
CPP
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<list>
#include<set>
using namespace std;
const int N=1e5+1;
const int MOD=1e9+7;
int T,M;
vector<int> que;
int gcd(int x,int y){
	int az=__builtin_ctz(x),bz=__builtin_ctz(y);
	int z=az>bz?bz:az,cha;
	y>>=bz;
	while(x){
		x>>=az;
		cha=y-x;
		az=__builtin_ctz(cha);
		if(x<y){
			y=x;
		}
		x=cha<0?-cha:cha;
	}
	return y<<z;
}
void irr(int a,int b,int c,int del){
	int u=-b,v=2*a,p=1,q=2*a;
	bool app=false;
	if(u*v<0){
		putchar('-');
	}
	if(u!=0){
		u=abs(u),v=abs(v);
		int comi=gcd(u,v);
		u/=comi,v/=comi;
		if(u==1){
			printf("%d",v);
		}
		else{
			printf("%d/%d",u,v);
		}
		app=true;
	}
	if(q<0){
		p=-1;
	}
	for(int i=2500;i>1;i--){
		if(del%que[i]==0){
			p*=i;
			del/=que[i];
		}
	}
	if(app&&p*q>0){
		putchar('+');
	}
	if(p*q<0){
		putchar('-');
	}
	p=abs(p),q=abs(q);
	int comi=gcd(p,q);
	p/=comi,q/=comi;
	if(p!=1){
		printf("%d*",p);
	}
	printf("sqrt(%d)",del);
	if(q!=1){
		printf("/%d\n",q);
	}
	else{
		putchar('\n');
	}
}
void rat(int a,int b,int c,int del){
	int p,q=2*a;
	if(q<0){
		p=0-del-b;
	}
	else{
		p=del-b;
	}
	if(p==0){
		putchar('0'),putchar('\n');
		return;
	}
	if(p*q<0){
		putchar('-');
	}
	p=abs(p),q=abs(q);
	int comi=gcd(p,q);
	p/=comi,q/=comi;
	if(q==1){
		printf("%d\n",p);
		return;
	}
	printf("%d/%d\n",p,q);
}
signed main(){
	scanf("%d%d",&T,&M);
	for(int i=0;i<=2500;i++){
		que.push_back(i*i);
	}
	int a,b,c;
	while(T--){
		scanf("%d%d%d",&a,&b,&c);
		int delt=b*b-4*a*c;
		if(delt<0){
			printf("NO\n");
			continue;
		}
		if(*lower_bound(que.begin(),que.end(),delt)==delt){
			rat(a,b,c,lower_bound(que.begin(),que.end(),delt)-que.begin());
		}
		else{
			irr(a,b,c,delt);
		}
	}
}

回复

1 条回复,欢迎继续交流。

正在加载回复...