わかさぎのブログ

プログラミング、Atcoderの勉強とか

AtCoder Beginner Contest 200 C - Ringo's Favorite Numbers 2

コード

N=int(input())
a=list(map(int,input().split()))

mod=200

b=[i%200 for i in a]

from collections import defaultdict

di=defaultdict(int)
for i in b:
    di[i]+=1

result=0
for i in range(200):
    n=di[i]
    result+=n*(n-1)//2

print(result)

考え方

200で割ったあまりで分類する。 a-bが200で割り切れるということはa≡b(mod200)であるから、数列anの中から200で割ったものの等しいものの集まりが何個あるか数えればいい。
例えば200で割ったあまりが2のものが3個なら3C2=n(n-1)/2をすればよく、それをすべて加算すればよい。