結果
問題 | No.764 浮動点 |
ユーザー |
![]() |
提出日時 | 2019-03-27 21:45:26 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,607 bytes |
コンパイル時間 | 1,034 ms |
コンパイル使用メモリ | 83,164 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-10-11 06:13:35 |
合計ジャッジ時間 | 2,261 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 11 WA * 12 |
ソースコード
#include <cmath>#include <vector>#include <iostream>#include <algorithm>using namespace std;const double pi = acos(-1);pair<int, int> calc(vector<int> v) {int sum = 0, mx = 0;for (int i = 0; i < v.size(); ++i) {sum += v[i];mx = max(mx, v[i]);}int L = 0, R = sum;if (mx * 2 > sum) L = mx * 2 - sum;return make_pair(L, R);}double area(double a, double b, double c) {if (a + b <= c) return 0;if (a < b) swap(a, b);if (a > b + c) return b * b * pi;double l = 0, r = min(a, b);for (int i = 0; i < 60; ++i) {double m = (l + r) * 0.5;double x = sqrt(a * a - m * m) + sqrt(b * b - m *m);if (x >= c) l = m;else r = m;}double rad1 = asin(l / a);double rad2 = asin(l / b);double circle1 = rad1 * a * a;double circle2 = rad2 * b * b;double ans = circle1 + circle2 - c * l;return ans;}int main() {int N;cin >> N;vector<int> A(N + 2);int sum = 0, mx = 0;for (int i = 0; i < N + 2; ++i) {cin >> A[i];}cout.precision(15);pair<int, int> resbase = calc(A);if (resbase.first > 0) {for (int i = 0; i < N; ++i) {cout << 0 << '\n';}}else {for (int i = 1; i <= N; ++i) {vector<int> vl, vr;for (int j = 1; j <= i; ++j) {vl.push_back(A[j]);}for (int j = i + 1; j <= N + 1; ++j) {vr.push_back(A[j]);}pair<int, int> wl = calc(vl);pair<int, int> wr = calc(vr);double ans = 0;ans += area(wl.second, wr.second, A[0]);ans += area(wl.first, wr.first, A[0]);ans -= area(wl.second, wr.first, A[0]);ans -= area(wl.first, wr.second, A[0]);cout << ans << '\n';}}return 0;}