ボウリングを選ぶ


質問する


A,B二人でボーリングをしています.二人は重さの違うボウリングを選びたいです.
全部でN個のボウリングがあり、ボウリングごとに重さがあり、ボールの番号は1から順番に並べられています.
同じ重さのボールは複数あるが、異なるボールと見なすことができる.
ボウリングの重量は1~Mの自然数で存在する.
例えば、Nが5、Mが3であり、各ボールの重量が1、3、2、3、および2の順である場合、各ボールの番号は1〜5である.
2人が選択できるボウリング番号の組み合わせを求めます.
(1号、2号),(1号、3号),(1号、4号),(1号、5号),(2号、3号、5号),(3号、4号、5号),(4号、5号)
結局、2人がボールを選んだのは8種類だった.
ボールごとにN個の重量がある場合は、2人でボウリングを選択する数を計算するプログラムを作成してください.
入力条件
第1行目では、ボウリングの個数N、ボールの最大重量Mがスペースで区切られ、自然数で与えられる.(1 <= N <= 1,000, 1<= M <= 10)
2行目では、ボウリング毎の重量Kがスペースで区切られ、順番に自然数で与えられる.(1 <= K <= M)
しゅつりょくじょうけん
1行目に2人がボウリングを選択した場合、数字が出力されます.
入力例1
5 3
1 3 2 3 2
出力例1
入力例2
8 5
1 5 4 3 2 4 5 2
出力例2
25

解法


...

コード1

n, m = map(int, input().split())

data = list(map(int, input().split()))
result = 0

for i in range(n):
    for j in range(i + 1, n):
        if data[i] == data[j]:
            continue
        result += 1

print(result)

別の解釈


...

コード2

n, m = map(int, input().split())
data = list(map(int, input().split()))

array = [0] * 11    # 1부터 10까지의 무게를 담는 리스트
for x in data:      # 각 무게에 해당하는 볼링공의 개수 세기
    array[x] += 1

result = 0
for i in range(1, m + 1):   # 1부터 m까지 각 무게에 대해
    n -= array[i]           # 무게가 i인 볼링공의 개수(A가 선택할 수 있는 개수) 제외
    result += array[i] * n  # (무게가 i인 볼링공의 개수) * (B가 선택하는 경우의 수)

print(result)