結果
| 問題 |
No.1884 Sequence
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 15:47:23 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,986 bytes |
| コンパイル時間 | 197 ms |
| コンパイル使用メモリ | 82,368 KB |
| 実行使用メモリ | 135,892 KB |
| 最終ジャッジ日時 | 2025-06-12 15:47:32 |
| 合計ジャッジ時間 | 8,533 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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()
gew1fw