結果
| 問題 |
No.1730 GCD on Blackboard in yukicoder
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 23:18:05 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 211 ms / 2,000 ms |
| コード長 | 1,024 bytes |
| コンパイル時間 | 295 ms |
| コンパイル使用メモリ | 82,120 KB |
| 実行使用メモリ | 131,552 KB |
| 最終ジャッジ日時 | 2025-04-15 23:19:19 |
| 合計ジャッジ時間 | 5,772 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 24 |
ソースコード
import sys
def main():
input = sys.stdin.read().split()
idx = 0
N = int(input[idx])
idx += 1
A = list(map(int, input[idx:idx+N]))
idx += N
max_A = max(A)
cnt_vals = [0] * (max_A + 2)
for a in A:
cnt_vals[a] += 1
# Compute frequency of each divisor
freq = [0] * (max_A + 2)
for d in range(1, max_A + 1):
multiple = d
while multiple <= max_A:
freq[d] += cnt_vals[multiple]
multiple += d
# Initialize max_d array
max_d = [0] * N # max_d[c] is the maximum d with cnt[d] = c
for d in range(1, max_A + 1):
c = N - freq[d]
if c < N: # since K can be up to N-1
if d > max_d[c]:
max_d[c] = d
# Compute prefix maximum array
prefix_max = [0] * N
prefix_max[0] = max_d[0]
for k in range(1, N):
prefix_max[k] = max(prefix_max[k-1], max_d[k])
# Output results
for k in range(N):
print(prefix_max[k])
if __name__ == '__main__':
main()
lam6er