結果
| 問題 |
No.550 夏休みの思い出(1)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-05-01 11:40:02 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,286 bytes |
| コンパイル時間 | 752 ms |
| コンパイル使用メモリ | 75,092 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-12-31 12:15:42 |
| 合計ジャッジ時間 | 2,370 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 55 |
ソースコード
#include <cstdio>
#include <cstdlib>
#include <cstddef>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <iostream>
#include <iomanip>
#define L64 long long
#define MOD (1000000007LL)
L64 getnum(L64 a, L64 b, L64 c, long double min, long double max, bool inv)
{
long double da, db, dc;
da = a; db = b; dc = c;
while(0.1 <= max - min){
long double mid = (min + max) / 2.0;
long double dx = mid;
long double p = dc + dx * (db + dx * (da + dx));
if(inv){
if(0 < p){
min = mid;
} else {
max = mid;
}
} else {
if(p < 0){
min = mid;
} else {
max = mid;
}
}
}
if(0 <= max){
return max + 0.1;
} else {
return min - 0.1;
}
}
int main(void)
{
L64 a, b, c;
L64 alpha, beta, gamma;
std::cin >> a >> b >> c;
double da, db, dc;
da = a; db = b; dc = c;
//x = (1/3)(-a +- sqrt(a^2-3b) )
double tgt1, tgt2;
tgt1 = (1 / 3.0) * (-da - std::sqrt(da * da - 3 * db));
tgt2 = (1 / 3.0) * (-da + std::sqrt(da * da - 3 * db));
alpha = getnum(a, b, c, -1000000000, tgt1, false);
beta = getnum(a, b, c, tgt1, tgt2, true);
gamma = getnum(a, b, c, tgt2, 1000000000, false);
std::cout << alpha << " " << beta << " " << gamma << std::endl;
}