結果
問題 |
No.1884 Sequence
|
ユーザー |
![]() |
提出日時 | 2025-06-12 20:46:19 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,986 bytes |
コンパイル時間 | 425 ms |
コンパイル使用メモリ | 81,792 KB |
実行使用メモリ | 135,372 KB |
最終ジャッジ日時 | 2025-06-12 20:46:27 |
合計ジャッジ時間 | 7,193 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 RE * 2 |
ソースコード
import sys import math def readints(): return list(map(int, sys.stdin.readline().split())) def main(): N = int(sys.stdin.readline()) A = readints() S = [x for x in A if x != 0] K = N - len(S) if len(S) == 0: print("Yes") return elif len(S) == 1: print("Yes") return S.sort() diffs = [] for i in range(1, len(S)): diffs.append(S[i] - S[i-1]) d = math.gcd(diffs[0], diffs[1]) for diff in diffs[2:]: d = math.gcd(d, diff) if d == 0: all_same = True first = S[0] for s in S: if s != first: all_same = False break if all_same: print("Yes") else: print("No") return r = S[0] % d max_S = S[-1] lower = max(max_S - (N-1)*d, 1) upper = S[0] if lower > upper: print("No") return mod = lower % d if mod == r: a = lower else: delta = (r - mod + d) % d a = lower + delta if a > upper: print("No") return valid = True for s in S: if (s - a) % d != 0: valid = False break m = (s - a) // d if m < 0 or m >= N: valid = False break if not valid: print("No") return count_filled = 0 for i in range(N): val = a + i * d if val <= 0: print("No") return low = 0 high = len(S) - 1 found = False while low <= high: mid = (low + high) // 2 if S[mid] == val: found = True break elif S[mid] < val: low = mid + 1 else: high = mid - 1 if not found: count_filled += 1 if count_filled == K: print("Yes") else: print("No") if __name__ == "__main__": main()