結果
| 問題 |
No.2683 Two Sheets
|
| コンテスト | |
| ユーザー |
FromBooska
|
| 提出日時 | 2024-03-21 11:30:52 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,571 bytes |
| コンパイル時間 | 321 ms |
| コンパイル使用メモリ | 82,384 KB |
| 実行使用メモリ | 92,288 KB |
| 最終ジャッジ日時 | 2024-09-30 10:04:57 |
| 合計ジャッジ時間 | 3,924 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | TLE * 1 -- * 12 |
ソースコード
# AB2個面積からダブり部分面積を引く、ダブり面積は1次元ずつ数えてその積
# 1次元W, Bを考えたとき、置き方総数は(W+1-B)の2乗
# 1個ダブるのはWに(2B-1)を置く数だからW+1-(2B-1)、左右入れ替え可能で2倍
# 2個ダブるのはWに(2B-2)を置く数だからW+1-(2B-2)、左右入れ替え可能で2倍
H, W, A, B = map(int, input().split())
from collections import defaultdict
# 横
yoko_dic = defaultdict(int)
for j in range(1, B+1):
if j == B:
yoko_dic[j] = W+1-(2*B-j)
else:
yoko_dic[j] = (W+1-(2*B-j))*2
yoko_total = (W+1-B)**2
yoko_dic[0] = yoko_total-sum(yoko_dic.values())
# 縦
tate_dic = defaultdict(int)
for i in range(1, A+1):
if i == A:
tate_dic[i] = H+1-(2*A-i)
else:
tate_dic[i] = (H+1-(2*A-i))*2
tate_total = (H+1-A)**2
tate_dic[0] = tate_total-sum(tate_dic.values())
'''
# 確率バージョン
ans = 0
for y in yoko_dic:
for t in tate_dic:
yoko_prob = yoko_dic[y]/yoko_total
tate_prob = tate_dic[t]/tate_total
area = A*B*2-y*t
calc = area*yoko_prob*tate_prob
ans += calc
print(ans)
'''
# modバージョン
mod = 998244353
ans = 0
yoko_total_inv = pow(yoko_total, mod-2, mod)
tate_total_inv = pow(tate_total, mod-2, mod)
for y in yoko_dic:
for t in tate_dic:
yoko_prob = yoko_dic[y]*yoko_total_inv
tate_prob = tate_dic[t]*tate_total_inv
area = A*B*2-y*t
calc = (area*yoko_prob*tate_prob)%mod
ans += calc
ans %= mod
print(ans)
FromBooska