結果
| 問題 |
No.1501 酔歩
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 16:37:19 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,677 bytes |
| コンパイル時間 | 400 ms |
| コンパイル使用メモリ | 82,216 KB |
| 実行使用メモリ | 89,236 KB |
| 最終ジャッジ日時 | 2025-06-12 16:37:27 |
| 合計ジャッジ時間 | 7,226 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 38 WA * 15 |
ソースコード
import sys
import math
def gcd(a, b):
while b:
a, b = b, a % b
return a
def simplify(num, den):
if den == 0:
return (0, 1)
g = gcd(abs(num), abs(den))
return (num // g, den // g)
def multiply(f1, f2):
num = f1[0] * f2[0]
den = f1[1] * f2[1]
return simplify(num, den)
def add(f1, f2):
num = f1[0] * f2[1] + f2[0] * f1[1]
den = f1[1] * f2[1]
return simplify(num, den)
def main():
N, K = map(int, sys.stdin.readline().split())
A = list(map(int, sys.stdin.readline().split()))
if K == 1:
print(0)
return
if K == N:
print(1)
return
prefix = []
prefix.append((1, 1))
max_j = N - 2
for j in range(1, max_j + 1):
if j + 1 >= len(A):
break
a = A[j-1]
b = A[j+1]
current = multiply(prefix[j-1], (a, b))
prefix.append(current)
sum_prefix = (0, 1)
for j in range(len(prefix)):
sum_prefix = add(sum_prefix, prefix[j])
max_j_k = K - 2
sum_k = (0, 1)
for j in range(max_j_k + 1):
if j >= len(prefix):
break
sum_k = add(sum_k, prefix[j])
if sum_prefix[1] == 0:
print(0)
return
numerator = sum_k[0] * sum_prefix[1]
denominator = sum_k[1] * sum_prefix[0]
g = gcd(numerator, denominator)
numerator //= g
denominator //= g
if denominator == 0:
print(0)
elif numerator == 0:
print(0)
else:
if denominator == 1:
print(numerator)
else:
print(f"{numerator}/{denominator}")
if __name__ == '__main__':
main()
gew1fw