問題概要
問題ページ
-
C - Distinct or Not
問題ページへ移動する
問題文
整数列 \(A_1, A_2, ..., A_N\) が与えられます。
この整数列のどの \(2\) つの要素も互いに異なるならば YES
を、そうでないなら NO
を出力してください。
制約
- \(2 ≤ N ≤ 200000\)
- \(1 ≤ A_i ≤ 10^9\)
- 入力は全て整数
問題の考察
pythonだと次の2通りの解答方法が簡単に思いつく
解答方針
- collection.Counter()を使って各要素毎に要素数をカウントする方法
- ソートしてから各要素の隣の要素が同じかどうか確認する方法
今回のACコードはcollection
ライブラリを使わずにsort()
とfor
文を使った方法でコーディングしている。
どちらも良く使うのでどちらでも解答できるようにしたい。
配列をsort()
した場合、同一の要素があればその要素は左右に出現することは感覚的に理解できると思う。
たびすけ
sort()
することで問題の難易度がグッと下がる問題はいっぱいあるよ!ACコード
import sys
def solve():
readline = sys.stdin.buffer.readline
mod = 10 ** 9 + 7
n = int(readline())
a = list(map(int, readline().split()))
a.sort()
for i in range(1, n):
if a[i] == a[i-1]:
print("NO")
exit()
print("YES")
if __name__ == '__main__':
solve()