Submission #3011790
Source Code Expand
N, pq = input().split() N = int(N) p, q = map(int, pq.split('/')) P = p / q PError = (q - p) / q Ass = [] for i in range(N): Ass.append(list(map(int, input().split()))) # numVs[i]: (v, -j): 本戦順位が(i+1)位の人は、本戦でv勝、予選で(j+1)位 numVs = [(sum(Ass[i]), -i) for i in range(N)] numVs.sort(reverse=True) # prob[v][j]: 実際にはv勝した人がj勝と記録される確率 prob = {} for v in range(numVs[-1][0], numVs[0][0] + 1): # dp[i][j]: i試合目まで行ったとき、j勝と記録される確率 dp = [0] * N dp[v] = 1 # 前半のv試合は、実際には勝利とする for i in range(0, v): for j in range(N): if dp[j] == 0: continue # 確率(1-P)で誤記録→勝利が敗北になる dp[j - 1] += dp[j] * PError # 確率Pで正しく記録 dp[j] *= P # 後半の(N-1-v)試合は、実際には敗北とする for i in range(v, N - 1): for j in reversed(range(N)): if dp[j] == 0: continue # 確率(1-P)で誤記録→敗北が勝利になる dp[j + 1] += dp[j] * PError # 確率Pで正しく記録 dp[j] *= P prob[v] = dp # dp[i][j]: 本戦順位が(i+1)位の人が、j勝と記録される確率(順位を変えない範囲で) dp = [[0] * N for i in range(N)] dp[0] = prob[numVs[0][0]] for i in range(1, N): accP = 0 if numVs[i][0] == numVs[i - 1][0] or -numVs[i][1] > -numVs[i - 1][1]: # 本戦順位が1つ上の人に対して、本戦での勝利数が同じ、 # または、予選順位が下ならば、記録上同じ勝利数でも順位は変わらない for j in reversed(range(N)): accP += dp[i - 1][j] dp[i][j] = accP * prob[numVs[i][0]][j] else: # それ以外は、勝利数が少ない場合のみ順位を保てる for j in reversed(range(N)): dp[i][j] = accP * prob[numVs[i][0]][j] accP += dp[i - 1][j] print(sum(dp[N - 1]))
Submission Info
Submission Time | |
---|---|
Task | C - 天下一プログラマーコンテスト1999 |
User | ZollingerPython3 |
Language | Python (3.4.3) |
Score | 600 |
Code Size | 2135 Byte |
Status | AC |
Exec Time | 27 ms |
Memory | 3188 KB |
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 600 / 600 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 00_sample_01, 00_sample_02, 00_sample_03, 00_sample_04, 02_manual_01, 02_manual_02, 02_manual_03, 02_manual_04, 02_manual_05, 02_manual_06, 02_manual_07, 02_manual_08, 02_manual_09, 02_manual_10, 02_manual_11, 02_manual_12, 20_random_00, 20_random_01, 20_random_02, 20_random_03, 20_random_04, 20_random_05, 20_random_06, 20_random_07, 20_random_08, 20_random_09, 20_random_10, 20_random_11, 20_random_12, 20_random_13, 20_random_14, 20_random_15, 20_random_16, 20_random_17, 20_random_18, 20_random_19, 30_manual_13, 30_manual_14, 30_manual_15, 30_manual_16, 30_manual_17, 30_manual_18, 30_manual_19 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_sample_01 | AC | 17 ms | 3188 KB |
00_sample_02 | AC | 17 ms | 3188 KB |
00_sample_03 | AC | 17 ms | 3188 KB |
00_sample_04 | AC | 17 ms | 3188 KB |
02_manual_01 | AC | 17 ms | 3188 KB |
02_manual_02 | AC | 17 ms | 3188 KB |
02_manual_03 | AC | 17 ms | 3188 KB |
02_manual_04 | AC | 17 ms | 3188 KB |
02_manual_05 | AC | 17 ms | 3188 KB |
02_manual_06 | AC | 17 ms | 3188 KB |
02_manual_07 | AC | 17 ms | 3188 KB |
02_manual_08 | AC | 17 ms | 3188 KB |
02_manual_09 | AC | 18 ms | 3188 KB |
02_manual_10 | AC | 17 ms | 3188 KB |
02_manual_11 | AC | 18 ms | 3188 KB |
02_manual_12 | AC | 17 ms | 3188 KB |
20_random_00 | AC | 20 ms | 3188 KB |
20_random_01 | AC | 19 ms | 3188 KB |
20_random_02 | AC | 18 ms | 3064 KB |
20_random_03 | AC | 18 ms | 3188 KB |
20_random_04 | AC | 18 ms | 3188 KB |
20_random_05 | AC | 18 ms | 3188 KB |
20_random_06 | AC | 18 ms | 3188 KB |
20_random_07 | AC | 18 ms | 3188 KB |
20_random_08 | AC | 18 ms | 3188 KB |
20_random_09 | AC | 18 ms | 3188 KB |
20_random_10 | AC | 18 ms | 3188 KB |
20_random_11 | AC | 18 ms | 3188 KB |
20_random_12 | AC | 18 ms | 3188 KB |
20_random_13 | AC | 18 ms | 3188 KB |
20_random_14 | AC | 17 ms | 3188 KB |
20_random_15 | AC | 18 ms | 3188 KB |
20_random_16 | AC | 18 ms | 3188 KB |
20_random_17 | AC | 18 ms | 3188 KB |
20_random_18 | AC | 18 ms | 3188 KB |
20_random_19 | AC | 18 ms | 3188 KB |
30_manual_13 | AC | 25 ms | 3188 KB |
30_manual_14 | AC | 26 ms | 3188 KB |
30_manual_15 | AC | 19 ms | 3188 KB |
30_manual_16 | AC | 27 ms | 3188 KB |
30_manual_17 | AC | 18 ms | 3188 KB |
30_manual_18 | AC | 22 ms | 3188 KB |
30_manual_19 | AC | 21 ms | 3188 KB |