結果

問題 No.475 最終日 - Writerの怠慢
ユーザー lam6er
提出日時 2025-03-20 18:49:03
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 91 ms / 2,000 ms
コード長 1,400 bytes
コンパイル時間 328 ms
コンパイル使用メモリ 82,712 KB
実行使用メモリ 101,224 KB
最終ジャッジ日時 2025-03-20 18:50:23
合計ジャッジ時間 2,071 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 15
権限があれば一括ダウンロードができます

ソースコード

diff #

import math

def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    idx = 0
    N = int(data[idx])
    idx += 1
    S = int(data[idx])
    idx += 1
    writer_id = int(data[idx])
    idx += 1
    a = list(map(int, data[idx:idx+N]))
    idx += N
    
    a_writer = a[writer_id]
    non_writers = []
    for i in range(N):
        if i != writer_id:
            non_writers.append(a[i])
    m = len(non_writers)
    
    if m == 0:
        print(1.0)
        return
    
    W = a_writer + 100 * S
    R_min_list = []
    
    for a_x in non_writers:
        K = (W - a_x) + 1
        K_rest = K - 50 * S
        if K_rest <= 0:
            print(0.0)
            return
        numerator = 50 * S
        denominator = K_rest
        tmp = (numerator / denominator) - 0.8
        R_float = tmp / 0.2
        R_float += 1e-12  # To handle cases where R_float is integral
        R_min_x = math.ceil(R_float)
        R_min_x = max(R_min_x, 1)
        if R_min_x > m:
            print(0.0)
            return
        R_min_list.append(R_min_x)
    
    R_min_list.sort()
    
    for i in range(m):
        if R_min_list[i] > (i + 1):
            print(0.0)
            return
    
    prob = 1.0
    for i in range(m):
        term = ( (i + 2 - R_min_list[i]) ) / (i + 1)
        prob *= term
    
    print("{0:.10f}".format(prob))

if __name__ == '__main__':
    main()
0