結果

問題 No.1319 最強とんがりコーン
ユーザー tmaeharatmaehara
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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);
}
0