結果

問題 No.1688 Veterinarian
ユーザー srjywrdnprktsrjywrdnprkt
提出日時 2023-06-03 17:52:16
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 278 ms / 3,000 ms
コード長 1,451 bytes
コンパイル時間 1,163 ms
コンパイル使用メモリ 122,792 KB
実行使用メモリ 332,416 KB
最終ジャッジ日時 2024-06-09 03:42:06
合計ジャッジ時間 6,070 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 226 ms
332,288 KB
testcase_01 AC 225 ms
332,160 KB
testcase_02 AC 226 ms
332,416 KB
testcase_03 AC 224 ms
332,160 KB
testcase_04 AC 224 ms
332,160 KB
testcase_05 AC 229 ms
332,160 KB
testcase_06 AC 225 ms
332,288 KB
testcase_07 AC 223 ms
332,288 KB
testcase_08 AC 272 ms
332,160 KB
testcase_09 AC 278 ms
332,160 KB
testcase_10 AC 234 ms
332,288 KB
testcase_11 AC 228 ms
332,416 KB
testcase_12 AC 227 ms
332,288 KB
testcase_13 AC 228 ms
332,288 KB
testcase_14 AC 225 ms
332,288 KB
testcase_15 AC 238 ms
332,288 KB
testcase_16 AC 227 ms
332,288 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <numeric>
#include <deque>
#include <complex>
#include <cassert>

using namespace std;
using ld = long double;

tuple<ld, ld, ld> tp = {-1, -1, -1};
vector<vector<vector<vector<tuple<ld, ld, ld>>>>> ans(51, vector(51, vector(51, vector<tuple<ld, ld, ld>>(51, tp))));

tuple<ld, ld, ld> f(int n, int a, int b, int c){
    if (n == 0) return {0, 0, 0};
    if (ans[n][a][b][c] != tp) return ans[n][a][b][c];
    ld s = a+b+c, pa = a*(a-1)/s/(s-1), pb= b*(b-1)/s/(s-1), pc = c*(c-1)/s/(s-1);
    ld x=0, y=0, z=0, xx, yy, zz;
    tie(xx, yy, zz) = f(n-1, a, b, c);
    x += xx * (1.0l-pa-pb-pc);
    y += yy * (1.0l-pa-pb-pc);
    z += zz * (1.0l-pa-pb-pc);
    if (a>1){
        tie(xx, yy, zz) = f(n-1, a-1, b, c);
        x += (xx+1) * pa;
        y += yy * pa;
        z += zz * pa;
    }
    if (b>1){
        tie(xx, yy, zz) = f(n-1, a, b-1, c);
        x += xx * pb;
        y += (yy+1) * pb;
        z += zz * pb;
    }
    if (c>1){
        tie(xx, yy, zz) = f(n-1, a, b, c-1);
        x += xx * pc;
        y += yy * pc;
        z += (zz+1) * pc;
    }
    return ans[n][a][b][c] = {x, y, z};
}

int main(){

    int a, b, c, n;
    cin >> a >> b >> c >> n;
    ld x, y, z;
    tie(x, y, z) = f(n, a, b, c);
    cout << setprecision(18) << x << " " << y <<  " " << z << endl;

    return 0;
}
0