結果
| 問題 |
No.406 鴨等間隔の法則
|
| ユーザー |
はむ吉🐹
|
| 提出日時 | 2016-07-03 20:04:38 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 82 ms / 2,000 ms |
| コード長 | 1,421 bytes |
| コンパイル時間 | 171 ms |
| コンパイル使用メモリ | 82,560 KB |
| 実行使用メモリ | 95,488 KB |
| 最終ジャッジ日時 | 2024-07-07 10:59:01 |
| 合計ジャッジ時間 | 3,885 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
ソースコード
#!/usr/bin/env pypy3
MIN_N = 3
MAX_N = 10 ** 5
MIN_X = 0
MAX_X = 10 ** 8
def main():
# 以下のassertは入力が制約を満たしていることを確認するためのもの
# 解答の際にはなくてもよい
# 鴨の数Nを受け取る
n = int(input())
assert MIN_N <= n <= MAX_N
# 鴨の座標の列{x_i}を受け取る
# 文字列をスペースで区切るにはsplitメソッドが使える
# あとは、得られた文字列のリストの各要素を整数に直す
xs = list(map(int, input().split()))
assert len(xs) == n
assert all(MIN_X <= x <= MAX_X for x in xs)
# 座標たちをin-placeで昇順にソートする
xs.sort()
# 隣接する2要素の差をとって得られる列(階差数列)を求める
# forループを回す代わりに、次のようにスライスとリスト内包表記を使える
# xs[:-1]は末尾以外の要素の列、xs[1:]は先頭以外の要素の列を表す
ds = [xj - xi for xi, xj in zip(xs[:-1], xs[1:])]
# 条件1および2を満たしているかを判定
# 条件2から考えると解きやすい
# まず、上のdsを集合に入れて、その要素数が1であることを確かめる
# あとは、その集合に0がないことを確認する
s = set(ds)
print("YES" if len(s) == 1 and 0 not in s else "NO")
if __name__ == '__main__':
main()
はむ吉🐹