結果
問題 | No.1688 Veterinarian |
ユーザー | srjywrdnprkt |
提出日時 | 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 |
ソースコード
#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; }