結果
問題 |
No.1884 Sequence
|
ユーザー |
![]() |
提出日時 | 2025-04-15 21:54:53 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,877 bytes |
コンパイル時間 | 177 ms |
コンパイル使用メモリ | 82,096 KB |
実行使用メモリ | 155,124 KB |
最終ジャッジ日時 | 2025-04-15 21:56:38 |
合計ジャッジ時間 | 11,134 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 WA * 5 TLE * 1 -- * 1 |
ソースコード
import math def main(): import sys input = sys.stdin.read().split() N = int(input[0]) A = list(map(int, input[1:N+1])) S = [x for x in A if x > 0] m = len(S) if m == 0: print("Yes") return if m == 1: print("Yes") return sorted_S = sorted(S) differences = [] for i in range(m-1): diff = sorted_S[i+1] - sorted_S[i] differences.append(diff) g = differences[0] for diff in differences[1:]: g = math.gcd(g, diff) if g == 0: print("Yes") return def get_divisors(g_val): if g_val == 0: return [] divisors = set() for i in range(1, int(math.isqrt(g_val)) + 1): if g_val % i == 0: divisors.add(i) divisors.add(g_val // i) return sorted(divisors) divisors = get_divisors(g) for d in divisors: if d == 0: continue r = sorted_S[0] % d valid = True for x in sorted_S: if x % d != r: valid = False break if not valid: continue max_low = -float('inf') for x in sorted_S: current = x - (N-1)*d if current > max_low: max_low = current min_x = sorted_S[0] lower = max(max_low, 1) upper = min_x if lower > upper: continue if r > upper: continue if r >= lower: a_candidate = r else: k = (lower - r + d - 1) // d a_candidate = r + k * d if a_candidate > upper: continue print("Yes") return print("No") if __name__ == "__main__": main()