문제
링크
풀이
#include <iostream>
#include <set>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iomanip>
#define int128 __int128
using namespace std;
bool f(int128 a, int128 b, int128 c, int128 d, int128 x) {
return a*x*x*x + b*x*x + c*x + d == 0;
}
void solve(void) {
int a, b, c, d;
cin >> a >> b >> c >> d;
double x;
for (int i=-1000000; i<=1000000; i++) {
if (!f(a, b, c, d, i)) continue;
x = i;
break;
}
set<double> s;
s.insert(x);
s.insert((-(b+a*x)+sqrt((b+a*x)*(b+a*x)-4*a*(c+b*x+a*x*x)))/(2*a));
s.insert((-(b+a*x)-sqrt((b+a*x)*(b+a*x)-4*a*(c+b*x+a*x*x)))/(2*a));
vector<double> ans;
for (auto it=s.begin(); it!=s.end(); it++) ans.push_back(*it);
sort(ans.begin(), ans.end());
for (auto it=ans.begin(); it!=ans.end(); it++) cout << fixed << setprecision(4) << *it << " ";
cout << "\n";
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
while (n--) solve();
return 0;
}