結果
| 問題 |
No.2872 Depth of the Parentheses
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-06 23:19:49 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,594 ms / 2,000 ms |
| コード長 | 1,525 bytes |
| コンパイル時間 | 446 ms |
| コンパイル使用メモリ | 82,324 KB |
| 実行使用メモリ | 152,364 KB |
| 最終ジャッジ日時 | 2024-09-06 23:20:16 |
| 合計ジャッジ時間 | 24,255 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 TLE * 5 |
ソースコード
def power(x, y, m):
if y == 0:
return 1
p = power(x, y // 2, m) % m
p = (p * p) % m
return p if y % 2 == 0 else (x * p) % m
def modInverse(a, m):
g = gcd(a, m)
# If a and m are relatively prime, then modulo inverse is a^(m-2) mode m
return power(a, m - 2, m)
def gcd(a, b):
if a == 0:
return b
return gcd(b % a, a)
def main():
inputs = input().split()
intinputs = [int(i) for i in inputs]
x = intinputs[0]
k = intinputs[1]
# x = int(input())
# k = int(input())
depth = [0] * (k + 1)
modwith = 998244353
pleft = x * modInverse(100, modwith)
pright = (100 - x) * modInverse(100, modwith)
for i in range(1 << (k * 2)):
op = 0
best = 0
prob = 1
pprob = 1.0
good = True
for j in range(k * 2):
if i & (1 << j):
op += 1
prob *= pleft
else:
op -= 1
prob *= pright
prob %= modwith
if op < 0:
good = False
best = max(best, op)
if op != 0:
good = False
if not good:
best = 0
depth[best] += prob
depth[best] %= modwith
exp = 0
for i in range(k + 1):
exp += depth[i] * i
exp %= modwith
print((exp + modwith) % modwith)
if __name__ == "__main__":
main()