結果
問題 | No.1730 GCD on Blackboard in yukicoder |
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
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()