Submission #8325338
Source Code Expand
#include<iostream> #include<cmath> #include<iomanip> using namespace std; typedef long long ll; int K, R[1 << 10]; double dp[10 + 1][1 << 10];//dp[i][j] := i回戦後、人jが勝ち残ってる確率 double win_probability(int P, int Q) { double waru = 1.0 + pow(10.0, (double)(R[Q] - R[P]) / 400.0); return 1.0 / waru; } int main() { cin >> K; for (int i = 0; i < (1 << K); i++)cin >> R[i]; for (int i = 0; i < (1 << K); i++)dp[0][i] = 1.0; for (int i = 1; i <= K; i++) { for (int j = 0; j < (1 << K); j++) { int l = (int)(j / pow(2, i)) * pow(2, i); int r = (int)(j / pow(2, i) + 1) * pow(2, i); //[l, r) for (int k = l; k < r; k++) { if (k == j)continue; if (((j >> (i - 1)) & 1) == ((k >> (i - 1)) & 1))continue; dp[i][j] += (dp[i - 1][j] * dp[i - 1][k]) * win_probability(j, k); } } } for (int i = 0; i < (1 << K); i++) { cout << setprecision(10) << dp[K][i] << endl; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - トーナメント |
User | Sen |
Language | C++14 (GCC 5.4.1) |
Score | 4 |
Code Size | 980 Byte |
Status | AC |
Exec Time | 85 ms |
Memory | 512 KB |
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 4 / 4 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 00, 01, 02, 03, 90, 91 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00 | AC | 85 ms | 512 KB |
01 | AC | 81 ms | 384 KB |
02 | AC | 23 ms | 384 KB |
03 | AC | 81 ms | 384 KB |
90 | AC | 1 ms | 256 KB |
91 | AC | 1 ms | 256 KB |