P9750 CSP-J T3求助
  • 板块灌水区
  • 楼主THM200000000
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/18 23:44
  • 上次更新2024/10/18 23:49:48
查看原帖
P9750 CSP-J T3求助
1405997
THM200000000楼主2024/10/18 23:44
#include<bits/stdc++.h>
#include<math.h>
//#define int long long
//#define int __int128
#define max(x, y) (x > y? x : y)
#define min(x, y) (x < y? x : y)
#define lowbit(x) (x & -x)
//#define N 100010
#define Fuck return
#define CCF 0
using namespace std;
int kaifang[5000010];
void init() {
	for(int i = 1; i < 2236; i++) {
		for(int j = i * i; j < (i + 1) * (i + 1); j++) {
			kaifang[j] = i;
		}
	}
	for(int i = 4999696; i <= 5000000; i++) {
		kaifang[i] = 2236;
	}
}
struct num_in_math {
	int _1fenzi1;
	int _2fenmu1;
	int _3fenzi2xishu;
	int _4fenzi2;
	int _5fenmu2;
} ans;
int gcd(int x, int y) {
	if(y) return gcd(y, x % y);
	else return x;
}
int g;
num_in_math huajian() {
	if(ans._3fenzi2xishu) {
		if(ans._5fenmu2 < 0) {
			ans._3fenzi2xishu *= -1;
			ans._5fenmu2 *= -1;
		}
		for(int i = kaifang[ans._4fenzi2]; i >= 2; i--) {
//			if(i > sqrt(ans._4fenzi2)) i = sqrt(ans._4fenzi2);
			if(ans._4fenzi2 % (i * i) == 0) {
				ans._3fenzi2xishu *= i;
				ans._4fenzi2 /= i * i;
				break;
			}
		}
		g = gcd(abs(ans._3fenzi2xishu), abs(ans._5fenmu2));
		ans._3fenzi2xishu /= g;
		ans._5fenmu2 /= g;
	}
	if(ans._2fenmu1 < 0) {
		ans._1fenzi1 *= -1;
		ans._2fenmu1 *= -1;
	}
	if(ans._4fenzi2 == 1 && ans._3fenzi2xishu != 0) {
		g = gcd(ans._2fenmu1, ans._5fenmu2);
		ans._1fenzi1 *= g;
		ans._2fenmu1 *= g;
		ans._3fenzi2xishu *= g;
		ans._5fenmu2 *= g;
		ans._1fenzi1 += ans._3fenzi2xishu;
		ans._3fenzi2xishu = 0;
	}
	g = gcd(abs(ans._1fenzi1), abs(ans._2fenmu1));
	ans._1fenzi1 /= g;
	ans._2fenmu1 /= g;
}
int T, M;
int a, b, c, deltarune;
signed main() {
//	freopen("uqe.in","r",stdin);
//	freopen("uqe.out","w",stdout);
//	cout << gcd(64, 36);
//	Fuck CCF;
	init();
	cin >> T >> M;
	while(T--) {
		scanf("%d%d%d", &a, &b, &c);
		ans._1fenzi1 = 0;
		ans._2fenmu1 = 1;
		ans._3fenzi2xishu = 0;
		ans._4fenzi2 = 0;
		ans._5fenmu2 = 1;
		deltarune = b * b - 4 * a * c;
		if(deltarune < 0) {
			printf("NO\n");
			continue;
		}
		if(b == 0) {
//			cout << "b = 0\n";
			if(a < 0) ans._3fenzi2xishu = -1;
			else ans._3fenzi2xishu = 1;
			ans._1fenzi1 = 0;
			ans._4fenzi2 = c * (-1) * a;
			ans._5fenmu2 = a;
//			huajian();
		} else if(c == 0) {
			if(a * b < 0) {
				ans._1fenzi1 = -b;
				ans._2fenmu1 = a;
			}
		} else if(deltarune == 0) {
			ans._3fenzi2xishu = 0;
			ans._2fenmu1 = 2 * a;
			ans._1fenzi1 = b * (-1);
		} else {
			if(a < 0) ans._3fenzi2xishu = -1;
			else ans._3fenzi2xishu = 1;
			ans._4fenzi2 = deltarune;
			ans._5fenmu2 = 2 * a;
			ans._2fenmu1 = 2 * a;
			ans._1fenzi1 = b * (-1);
		}
		huajian();
		if(ans._1fenzi1) {
			printf("%d", ans._1fenzi1);
			if(ans._2fenmu1 != 1) printf("/%d", ans._2fenmu1);
		}
		if(ans._3fenzi2xishu && ans._4fenzi2) {
			if(ans._1fenzi1 != 0) {
				if(ans._3fenzi2xishu > 0) putchar('+');
				if(ans._3fenzi2xishu == -1) putchar('-');
			}
			if(abs(ans._3fenzi2xishu) != 1) printf("%d*", ans._3fenzi2xishu);
			printf("sqrt(%d)", ans._4fenzi2);
			if(ans._5fenmu2 != 1) printf("/%d", ans._5fenmu2);
		}
		if(ans._1fenzi1  == 0 && (ans._3fenzi2xishu == 0 || ans._4fenzi2 == 0)) putchar('0');
		putchar('\n');
	}
	Fuck CCF;
}

在本地没问题,一交就TLE

2024/10/18 23:44
加载中...