結果
問題 |
No.406 鴨等間隔の法則
|
ユーザー |
![]() |
提出日時 | 2016-08-03 17:23:38 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 67 ms / 2,000 ms |
コード長 | 903 bytes |
コンパイル時間 | 213 ms |
コンパイル使用メモリ | 82,416 KB |
実行使用メモリ | 84,772 KB |
最終ジャッジ日時 | 2024-07-07 11:16:49 |
合計ジャッジ時間 | 3,001 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
#!/usr/bin/env pypy3 # btkさんのO(N)解 http://yukicoder.me/submissions/108107 を踏まえて def validate(n, xs): x_max = max(xs) x_min = min(xs) # 数列の「幅」を求める l = x_max - x_min # 「間の数」はN - 1個 # lがこれで割り切れない or lが0ならば不適 d, m = divmod(l, n - 1) if m > 0 or l == 0: return False # ソート済みの列は y_i = y_0 + i dと表される # ここでy_0 = x_min # x_iの各要素がその一つ一つに対応している必要がある counter = [0 for _ in range(n)] for x in xs: i, m = divmod(x - x_min, d) if m > 0: return False counter[i] += 1 return n == sum(counter) def main(): n = int(input()) xs = list(map(int, input().split())) print("YES" if validate(n, xs) else "NO") if __name__ == '__main__': main()