아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

하이퍼체커 점수 세기

면접 대비

시간 제한1초메모리 제한512 MB

요약
주어진 n장의 카드에서 세 장을 골라 만들 수 있는 순서 있는 삼중항 (a,b,c) 중 최댓값이 최솟값의 k배 이하인 것의 개수를 센다.
난이도

보통10점 중 6점

유형
정렬, 투 포인터, 수학, 조합론
정답자
아직 제출이 없습니다

문제

안드레이는 하이퍼체커 대회의 심판으로 일한다. 하이퍼체커 경기에는 세 명의 선수가 참가한다. 경기가 진행되는 동안 각 선수는 양의 정수 점수를 얻는다. 경기가 끝난 뒤 첫 번째 선수가 aa점, 두 번째 선수가 bb점, 세 번째 선수가 cc점을 얻었다면 경기가 a:b:ca:b:c의 점수로 끝났다고 한다.

안드레이는 하이퍼체커 규칙상 경기 결과에서 어떤 두 선수의 점수도 kk배를 초과하여 차이 나지 않는다는 것을 알고 있다.

경기가 끝난 뒤 안드레이는 선수들의 점수가 적힌 카드 세 장을 특별한 전광판에 놓아 결과를 보여 준다. 이를 위해 그는 숫자 x1,x2,…,xnx_1, x_2, \ldots, x_n이 적힌 nn장의 카드 묶음을 가지고 있다. 안드레이는 대회를 얼마나 잘 준비했는지 알아보기 위해, 가지고 있는 카드로 전광판에 보여 줄 수 있는 서로 다른 점수 경우의 수가 몇 가지인지 알고 싶어 한다.

kk와 안드레이가 가진 카드에 적힌 숫자가 주어질 때, 안드레이가 전광판에 보여 줄 수 있는 서로 다른 점수 경우의 수를 구하는 프로그램을 작성하라.

입력

첫째 줄에 정수 nn과 kk가 주어진다. (3≤n≤100 0003 \le n \le 100\,000, 1≤k≤1091 \le k \le 10^9)

둘째 줄에 nn개의 정수 x1,x2,…,xnx_1, x_2, \ldots, x_n이 주어진다. (1≤xi≤1091 \le x_i \le 10^9)

출력

서로 다른 점수 경우의 수를 하나의 정수로 출력한다.

힌트

예시에서 안드레이는 다음 점수 경우를 보여 줄 수 있다: 1:1:2, 1:2:1, 2:1:1, 1:2:2, 2:1:2, 2:2:1, 2:2:3, 2:3:2, 3:2:2. 가지고 있는 카드로 만들 수 있는 다른 세 수의 조합은 어떤 두 선수의 점수가 k=2k = 2배를 초과하여 차이 나지 않는다는 조건을 만족하지 않는다.

예제1

  1. 예제 1

    입력
    5 2
    1 1 2 2 3
    
    예상 출력
    9