結果
| 問題 |
No.1730 GCD on Blackboard in yukicoder
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 16:13:37 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 266 ms / 2,000 ms |
| コード長 | 1,277 bytes |
| コンパイル時間 | 586 ms |
| コンパイル使用メモリ | 81,708 KB |
| 実行使用メモリ | 148,792 KB |
| 最終ジャッジ日時 | 2025-04-16 16:17:59 |
| 合計ジャッジ時間 | 7,317 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 24 |
ソースコード
def main():
import sys
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 = 10**6
freq = [0] * (max_A + 1)
for a in A:
freq[a] += 1
# Compute cnt[d] for all d from 1 to max_A
cnt = [0] * (max_A + 1)
for d in range(1, max_A + 1):
for multiple in range(d, max_A + 1, d):
cnt[d] += freq[multiple]
# Collect all d with cnt[d] > 0 and sort in descending order
sorted_ds = []
for d in range(1, max_A + 1):
if cnt[d] > 0:
sorted_ds.append(d)
sorted_ds.sort(reverse=True)
# Process each d to collect ranges
current_max = N - 1
ranges = []
for d in sorted_ds:
required_K = max(0, N - cnt[d])
if required_K > current_max:
continue
start = required_K
end = current_max
ranges.append((start, end, d))
current_max = start - 1
if current_max < 0:
break
# Initialize ans array
ans = [0] * N
for start, end, d in ranges:
for k in range(start, end + 1):
ans[k] = d
# Output the results
for k in range(N):
print(ans[k])
if __name__ == '__main__':
main()
lam6er