정수 나눗셈
면접 대비시간 제한2초메모리 제한512 MB
주어진 수들을 d로 나눈 몫이 같은 두 원소의 쌍 개수를 구한다.
문제
C++에서 양의 정수끼리의 나눗셈은 항상 내림한다. 그래서 서로 다른 두 정수를 같은 수로 나누면 결과가 같아지는 경우가 있다. 예를 들어 C++에서 5/4와 7/4는 둘 다 1이지만 5 ≠ 7이다.
음이 아닌 정수들의 목록과 나누는 수가 주어질 때, 목록에서 서로 다른 두 원소를 골라 C++의 정수 나눗셈으로 같은 수로 나누었을 때 결과가 같아지는 쌍은 몇 개인가?
입력
첫째 줄에 목록의 원소 개수 n (1 ≤ n ≤ 200 000)과 나누는 수 d (1 ≤ d ≤ 10^9)가 주어진다.
둘째 줄에 n개의 정수 a1, . . . , an (0 ≤ ai ≤ 10^9)이 주어진다. ai는 목록의 i번째 원소이다.
출력
1 ≤ i < j ≤ n이고 C++의 정수 나눗셈에서 ai/d = aj/d를 만족하는 서로 다른 인덱스 쌍 (i, j)의 개수를 하나의 정수로 출력한다. 목록의 수가 서로 같을 수도 있다. 즉 i ≠ j인데 ai = aj인 경우가 있을 수 있다.