90分WA in #6
查看原帖
90分WA in #6
745910
20111019Yu楼主2023/11/28 21:23
#include <bits/stdc++.h>
using namespace std;
int t, m, a, b, c;

bool check1(double x){
	if((int)sqrt(x) * (int)sqrt(x) == x) return 1;
	return 0;
}
void rational(double ans){
	if(ans == (int)ans) cout << (int)ans;
	else{
		for( int i = 1; i <= m; i++ ){
			if(int(ans * i) == ans * i){
				cout << int(ans * i) << "/" << i;
				return;
			}
		}
	}
}

int main(){
	freopen("uqe2.in", "r", stdin);
	freopen("uqe.out", "w", stdout);
	cin >> t >> m;
	while(t--){
		cin >> a >> b >> c;
		double chans = pow(b, 2) - 4 * a * c;
		if(chans < 0) cout << "NO" << endl;
		else{
			double maxn = max((-b + sqrt(chans)) / (2 * a), (-b - sqrt(chans)) / (2 * a));
			if(check1(chans)){
				rational(maxn);
				cout << endl;
			} 
			else{
				if(-b != 0){
					rational(-b / (2.00 * a));
					cout << "+";
				}
				int tmp = 1;
				for( int i = 2; i <= m; i++ ){
					while((int)chans % (i * i) == 0){
						tmp *= i;
						chans /= (i * i);
					}
				}
				int gcd = __gcd((int)tmp, 2 * a);
				tmp /= gcd;
				int op = 2 * a / gcd;
				if(abs(tmp) != 1) cout << abs(tmp) << "*";
				cout << "sqrt(" << chans << ")";
				if(abs(op) != 1) cout << "/" << abs(op);
				cout << endl;
			}
		}
	}
	return 0;
}

这个程序告诉我 31 不等于 31
导致错误数据:

1 1000
225 -300 -341
2023/11/28 21:23
加载中...