Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- #include <iomanip>
- #include <fstream>
- #include <string>
- #include <set>
- #include <deque>
- #include <queue>
- #include <map>
- #include <bitset>
- #include <random>
- #include<cassert>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef double ld;
- #define sqrt sqrtl
- #define endl "\n"
- #define all(a) a.begin(), a.end()
- //const ll inf = 1e9;
- long double eps = 1e-18;
- //#define INF 10;7y,sizeof x)
- typedef pair<ll, ll> pi;
- typedef vector<pi> vii;
- #define map map
- #define pi 3.141592654
- #define T while(t--)
- #define pb push_back
- #define pf push_front
- #define mp make_pair
- #define ff first
- #define ss second
- #define si set<ll>
- #define se multiset<ll>
- //int m = 1e10 + 7;
- //int b = 27;
- /*istream& operator >> (istream& in, vector <T>& a) {
- fro(T & i:a) in >> i;
- return in;
- }
- template <typename T>
- ostream& operator << (istream& out, vector <T>& a) {
- for (T& i : a) {
- out < i << " ";
- }
- return out << ;
- }
- void do_h(string & s, vector <ll>&h, vector <ll>&p) {
- ll n = s.size(), i, j;
- h[0] = 0;
- p[0] = 1;
- for (i = 0; i < n; i++) {
- h[i + 1] = (h[i] * b + (s[i] - 'a' + 1)) % m;
- p[i + 1] = (p[i] * b) % m;
- }
- }*/
- /*ll get_h(ll l, ll r, vector <ll>&h, vector <ll>&p) {
- return h[r + 1] - (h[l] * p[r - l + 1]) % m;
- }*/
- ll rup(ll ik, ll ikk) {
- if (ik % ikk == 0) return ik / ikk;
- else return (ik / ikk) + 1;
- }
- ll gcd(ll a, ll b) {
- if (b == 0) return a;
- return gcd(b, a % b);
- }
- ll lcm(ll a, ll b) {
- return (a * b) / gcd(a, b);
- }
- ll modpow(ll x, ll n, ll m) {
- if (n == 0) return 1 % m;
- long long u = modpow(x, n / 2, m);
- u = (u * u) % m;
- if (n % 2 == 1) u = (u * x) % m;
- return u;
- }
- ll nm(ll a, ll b) {
- return (b + (a % b)) % b;
- }
- ld a, b, c, d;
- ld f(ld x) {
- return a * x * x * x + b * x * x + c * x + d;
- }
- bool cmp(ld x, ld x1) {
- return fabs(x - x1) < eps;
- }
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- cout << fixed<<setprecision(6);
- vector<ld>ans;
- cin >> a >> b >> c >> d;
- if (abs(a)<eps && abs(b)<eps) {
- cout << -d / c;
- return 0;
- }
- if (abs(a)<eps ) {
- a = b;
- b = c;
- c = d;
- ld diz1 = pow(b, 2) - 4 * a * c;
- if (abs(a) > eps && diz1 > eps)
- {
- ld x11 = (-b + sqrt(diz1)) / (2 * a);
- ld x22 = (-b - sqrt(diz1)) / (2 * a);
- if (x11 > x22) cout << x22 << " " << x11;
- else cout << x11 << " " << x22;
- }
- else
- if (abs(a) > eps && abs(diz1) < eps) {
- ld x11 = -b / 2 * a;
- cout << x11;
- }
- return 0;
- }
- ld r = 1001.0;
- ld l = -1001.0;
- if (a < -eps) {
- a = -a;
- b = -b;
- c = -c;
- d = -d;
- }
- for (int i = 0; i < 200; i++) {
- ld x = (l + r) / 2;
- if (f(x) < 0)l = x;
- else r = x;
- }
- ld x1 = (l + r) / 2;
- a = a;
- b = a * x1 + b;
- c = b * x1 + c;
- ans.pb(x1);
- ld x2, x3;
- ld diz = pow(b, 2) - 4 * a * c;
- if (abs(a) < eps && abs(b) > eps && abs(c) > eps)
- {
- x2 = -c / b;
- ans.push_back(x2);
- }
- if (abs(a) > eps && abs(b) > eps && abs(c) > eps) {
- if (abs(a) > eps && diz > eps)
- {
- x2 = (-b + sqrt(diz)) / (2 * a);
- x3 = (-b - sqrt(diz)) / (2 * a);
- ans.push_back(x3);
- ans.push_back(x2);
- }
- else
- if (abs(a) > eps && abs(diz) < eps) {
- x2 = -b / 2 * a;
- ans.push_back(x2);
- }
- }
- sort(all(ans));
- cout << ans[0] << " ";
- for (int i = 1; i < ans.size(); i++) {
- if (ans[i ] - ans[i-1] < eps)continue;
- else cout << ans[i] <<" ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement