結果
問題 | No.937 Ultra Sword |
ユーザー |
![]() |
提出日時 | 2025-04-15 22:06:05 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,512 bytes |
コンパイル時間 | 240 ms |
コンパイル使用メモリ | 81,700 KB |
実行使用メモリ | 90,464 KB |
最終ジャッジ日時 | 2025-04-15 22:07:29 |
合計ジャッジ時間 | 4,346 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 30 WA * 17 |
ソースコード
import sys import math def main(): input = sys.stdin.read().split() N = int(input[0]) A = list(map(int, input[1:N+1])) # Compute GCD of all elements G = A[0] for num in A[1:]: G = math.gcd(G, num) # Check if sum_g is achievable a = [num // G for num in A] sum_g = sum(a) has_G = G in A found_xor_1 = False if not has_G: seen = set() for num in a: target = num ^ 1 if target in seen: found_xor_1 = True break seen.add(num) sum_g_achievable = has_G or found_xor_1 # Compute sum_sword_min max_A = max(A) if A else 0 freq = [0] * (max_A + 1) for num in A: freq[num] += 1 sum_total = sum(A) # Precompute sum_divisible for all possible d sum_divisible = [0] * (max_A + 1) for d in range(1, max_A + 1): k = 1 while d * k <= max_A: sum_divisible[d] += k * freq[d * k] k += 1 sum_sword_min = float('inf') for x in A: d = x current_sum = 1 + sum_total - sum_divisible[d] * (d - 1) if freq[d] > 0: current_sum -= 1 if current_sum < sum_sword_min: sum_sword_min = current_sum sum_original = sum_total candidates = [sum_original, sum_sword_min] if sum_g_achievable: candidates.append(sum_g) answer = min(candidates) print(answer) if __name__ == "__main__": main()