結果

問題 No.1730 GCD on Blackboard in yukicoder
ユーザー lam6er
提出日時 2025-04-15 23:17:45
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 275 ms / 2,000 ms
コード長 1,277 bytes
コンパイル時間 354 ms
コンパイル使用メモリ 81,732 KB
実行使用メモリ 148,860 KB
最終ジャッジ日時 2025-04-15 23:19:21
合計ジャッジ時間 7,286 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 24
権限があれば一括ダウンロードができます

ソースコード

diff #

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()
0