結果
問題 |
No.550 夏休みの思い出(1)
|
ユーザー |
|
提出日時 | 2017-07-28 23:20:05 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,738 bytes |
コンパイル時間 | 1,190 ms |
コンパイル使用メモリ | 110,512 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-10-11 05:32:17 |
合計ジャッジ時間 | 2,563 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 55 |
ソースコード
#define _USE_MATH_DEFINES #include <cstdio> #include <iostream> #include <sstream> #include <fstream> #include <iomanip> #include <algorithm> #include <cmath> #include <complex> #include <string> #include <vector> #include <list> #include <queue> #include <stack> #include <set> #include <map> #include <bitset> #include <numeric> #include <limits> #include <climits> #include <cfloat> #include <functional> #include <iterator> using namespace std; const long long INF = LLONG_MAX / 2; const int MAX = 1000000000; long long getVal(const vector<long long>& coef, int x) { double tmp = 0.0; for(int i=coef.size()-1; i>=0; --i){ tmp *= x; tmp += coef[i]; } if(tmp < -INF) return -INF; if(tmp > INF) return INF; long long ans = 0; for(int i=coef.size()-1; i>=0; --i){ ans *= x; ans += coef[i]; } return ans; } int main() { vector<long long> coef(4); coef[3] = 1; for(int i=2; i>=0; --i) cin >> coef[i]; int left = -MAX; int right = MAX; while(left < right){ int mid = (left + right + 1) / 2; long long tmp = getVal(coef, mid); if(tmp <= 0) left = mid; else right = mid - 1; } vector<int> ans(1, left); long double a = coef[2] + (long double)ans[0]; long double b = -coef[0] / (long double)ans[0]; long double tmp = max(0.0l, a*a - 4*b); long double x1 = (-a - sqrt(tmp)) / 2; long double x2 = (-a + sqrt(tmp)) / 2; ans.push_back((int) round(x1)); ans.push_back((int) round(x2)); sort(ans.begin(), ans.end()); cout << ans[0]; for(int i=1; i<3; ++i) cout << ' ' << ans[i]; cout << endl; return 0; }