题目描述
译自 ROIR 2016 Day2 T2. Счет в гипершашках
安德烈在一场超级跳棋锦标赛中担任裁判。在每局超级跳棋游戏中,有三位玩家参与。游戏过程中,每位玩家会获得一个正整数的得分。如果游戏结束后,第一位玩家获得 a 分,第二位获得 b 分,第三位获得 c 分,则称游戏的最终得分为 a:b:c。
安德烈了解到,超级跳棋的规则规定,游戏结束后,任意两位玩家的得分之比不会超过 k 倍。
比赛结束后,安德烈需要通过在专用计分板上放置三张显示玩家得分的卡片来展示比赛结果。他手头有一个包含 n 张卡片的集合,卡片上分别写着数字 x1,x2,…,xn。为了评估自己对锦标赛的准备情况,安德烈想知道,利用手头的这些卡片,他能在计分板上展示出多少种不同的得分组合。
你需要编写一个程序,根据给定的 k 值以及安德烈手头卡片上的数字,计算出他能展示的不同得分组合的数量。
输入格式
输入文件的第一行包含两个整数 n 和 k (3≤n≤100000,1≤k≤109)。
输入文件的第二行包含 n 个整数 x1,x2,…,xn (1≤xi≤109)。
输出格式
输出文件应包含一个整数,即所需的不同得分组合的数量。
5 2
1 1 2 2 3
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=2 倍。
数据范围与提示
详细子任务附加限制及分值如下表所示:
| 子任务 |
分值 |
附加限制 |
| 1 |
15 |
3≤n≤100000, k=1, 1≤xi≤100000 |
| 2 |
23 |
3≤n≤100, 1≤k≤100, 1≤xi≤100 |
| 3 |
30 |
3≤n≤100000, 1≤k≤109, 1≤xi≤109,所有 xi 均不同 |
| 4 |
32 |
3≤n≤100000, 1≤k≤109, 1≤xi≤109 |