結果
| 問題 |
No.475 最終日 - Writerの怠慢
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-05 23:45:32 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 95 ms / 2,000 ms |
| コード長 | 1,308 bytes |
| コンパイル時間 | 455 ms |
| コンパイル使用メモリ | 82,664 KB |
| 実行使用メモリ | 87,812 KB |
| 最終ジャッジ日時 | 2025-11-05 23:45:35 |
| 合計ジャッジ時間 | 2,599 ms |
|
ジャッジサーバーID (参考情報) |
judge7 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 15 |
ソースコード
# https://yukicoder.me/problems/no/2869
def main():
N, S, writer_id = map(int, input().split())
A = list(map(int, input().split()))
writer_score = 100 * S + A[writer_id]
def fn(r: int):
x = 50 * S + (50 * S) / (0.8 + 0.2 * r)
return int(x)
array_map = {}
for i in range(N):
if i == writer_id:
continue
if fn(1) <= writer_score - A[i]:
if 0 not in array_map:
array_map[0] = 0
array_map[0] += 1
continue
low = 1
high = N
while high - low > 1:
mid = (high + low) // 2
if fn(mid) > writer_score - A[i]:
low = mid
else:
high = mid
if fn(high) > writer_score - A[i]:
v = high
else:
v = low
if v not in array_map:
array_map[v] = 0
array_map[v] += 1
n = N - 1
b = 0
array = [0] * (N - 1)
for i in range(N - 1):
if i in array_map:
b += array_map[i]
array[i] = b / n
b -= 1
n -= 1
array.sort(reverse=True)
answer = 1.0
for a in array:
answer *= a
print(answer)
if __name__ == "__main__":
main()