結果
問題 | No.1319 最強とんがりコーン |
ユーザー | tmaehara |
提出日時 | 2022-01-03 04:58:07 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 1,510 bytes |
コンパイル時間 | 1,833 ms |
コンパイル使用メモリ | 74,880 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-12 11:38:55 |
合計ジャッジ時間 | 2,898 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 3 ms
5,248 KB |
testcase_02 | AC | 3 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 2 ms
5,248 KB |
testcase_07 | AC | 2 ms
5,248 KB |
testcase_08 | AC | 2 ms
5,248 KB |
testcase_09 | AC | 3 ms
5,248 KB |
testcase_10 | AC | 2 ms
5,248 KB |
testcase_11 | AC | 2 ms
5,248 KB |
testcase_12 | AC | 3 ms
5,248 KB |
testcase_13 | AC | 3 ms
5,248 KB |
testcase_14 | AC | 2 ms
5,248 KB |
testcase_15 | AC | 2 ms
5,248 KB |
testcase_16 | AC | 2 ms
5,248 KB |
testcase_17 | AC | 3 ms
5,248 KB |
testcase_18 | AC | 3 ms
5,248 KB |
testcase_19 | AC | 2 ms
5,248 KB |
testcase_20 | AC | 3 ms
5,248 KB |
testcase_21 | AC | 3 ms
5,248 KB |
testcase_22 | AC | 3 ms
5,248 KB |
testcase_23 | AC | 3 ms
5,248 KB |
testcase_24 | AC | 3 ms
5,248 KB |
testcase_25 | AC | 3 ms
5,248 KB |
testcase_26 | AC | 3 ms
5,248 KB |
testcase_27 | AC | 3 ms
5,248 KB |
testcase_28 | AC | 3 ms
5,248 KB |
testcase_29 | AC | 3 ms
5,248 KB |
testcase_30 | AC | 3 ms
5,248 KB |
testcase_31 | AC | 2 ms
5,248 KB |
testcase_32 | AC | 2 ms
5,248 KB |
testcase_33 | AC | 2 ms
5,248 KB |
testcase_34 | AC | 2 ms
5,248 KB |
testcase_35 | AC | 2 ms
5,248 KB |
testcase_36 | AC | 2 ms
5,248 KB |
testcase_37 | AC | 2 ms
5,248 KB |
testcase_38 | AC | 3 ms
5,248 KB |
testcase_39 | AC | 3 ms
5,248 KB |
testcase_40 | AC | 3 ms
5,248 KB |
testcase_41 | AC | 2 ms
5,248 KB |
testcase_42 | AC | 3 ms
5,248 KB |
testcase_43 | AC | 2 ms
5,248 KB |
testcase_44 | AC | 2 ms
5,248 KB |
testcase_45 | AC | 2 ms
5,248 KB |
testcase_46 | AC | 2 ms
5,248 KB |
testcase_47 | AC | 2 ms
5,248 KB |
testcase_48 | AC | 2 ms
5,248 KB |
testcase_49 | AC | 2 ms
5,248 KB |
testcase_50 | AC | 2 ms
5,248 KB |
testcase_51 | AC | 2 ms
5,248 KB |
testcase_52 | AC | 2 ms
5,248 KB |
testcase_53 | AC | 2 ms
5,248 KB |
testcase_54 | AC | 2 ms
5,248 KB |
testcase_55 | AC | 2 ms
5,248 KB |
testcase_56 | AC | 2 ms
5,248 KB |
testcase_57 | AC | 2 ms
5,248 KB |
testcase_58 | AC | 2 ms
5,248 KB |
testcase_59 | AC | 2 ms
5,248 KB |
testcase_60 | AC | 2 ms
5,248 KB |
testcase_61 | AC | 2 ms
5,248 KB |
testcase_62 | AC | 2 ms
5,248 KB |
testcase_63 | AC | 3 ms
5,248 KB |
testcase_64 | AC | 2 ms
5,248 KB |
testcase_65 | AC | 2 ms
5,248 KB |
testcase_66 | AC | 2 ms
5,248 KB |
testcase_67 | AC | 2 ms
5,248 KB |
testcase_68 | AC | 3 ms
5,248 KB |
testcase_69 | AC | 3 ms
5,248 KB |
testcase_70 | AC | 3 ms
5,248 KB |
ソースコード
#include <iostream> #include <cmath> #include <limits> #include <functional> using namespace std; template <class F> double integrate(F f, double lo, double hi, double eps = 1e-8) { const double th = eps / numeric_limits<double>::epsilon(); function<double (double,double,double,double,int)> rec = [&](double x0, double x6, double y0, double y6, int d) { const double a = sqrt(2.0/3.0), b = 1.0 / sqrt(5.0); double x3 = (x0 + x6)/2, y3 = f(x3), h = (x6 - x0)/2; double x1 = x3-a*h, x2 = x3-b*h, x4 = x3+b*h, x5 = x3+a*h; double y1 = f(x1), y2 = f(x2), y4 = f(x4), y5 = f(x5); double I1 = (y0+y6 + 5*(y2+y4)) * (h/6); double I2 = (77*(y0+y6) + 432*(y1+y5) + 625*(y2+y4) + 672*y3) * (h/1470); if (x3 + h == x3 || d > 50) return 0.0; if (d > 4 && th + (I1-I2) == th) return I2; // avoid degeneracy return (double)(rec(x0, x1, y0, y1, d+1) + rec(x1, x2, y1, y2, d+1) + rec(x2, x3, y2, y3, d+1) + rec(x3, x4, y3, y4, d+1) + rec(x4, x5, y4, y5, d+1) + rec(x5, x6, y5, y6, d+1)); }; return rec(lo, hi, f(lo), f(hi), 0); } double circle_circle_intersection(double r, double d) { double D = 4*r*r - d*d; if (D < 0) { return 0; } else { return 2*r*r*acos(d/2/r)-d*sqrt(D)/2; } } int main(){ double r, h, d; scanf("%lf %lf %lf", &r, &h, &d); r /= h; d /= h; double ans = integrate([&](double z) { return circle_circle_intersection(r*z, d); }, 0, 1, 1e-8); printf("%.12lf", ans*h*h*h); }