#723. 状态码配对
状态码配对
题目描述
某设备把每条状态记录保存为一个 8 位无符号状态码,状态码的取值范围为 0~255。
对于两个状态码 a 和 b,先计算 a XOR b。其二进制表示中 1 的个数,等于这两个状态码在 8 个二进制位上不同的位置数,记为它们的位差。
给定 n 个状态码和整数 k。若第 i 个状态码与第 j 个状态码(i<j)的位差恰好等于 k,则称 (i,j) 为一个合格配对。
请统计合格配对的总数,并找出字典序最小的合格配对:优先选择 i 较小的;若 i 相同,再选择 j 较小的。
输入格式
第一行输入两个整数 n、k,相邻整数之间用一个空格分隔。 第二行输入 n 个整数 a1,a2,…,an,相邻整数之间用一个空格分隔。
输出格式
第一行输出一个整数,表示合格配对的总数。 第二行输出两个整数 i、j,表示字典序最小的合格配对。若不存在合格配对,则第二行输出 0 0。
样例
5 2
3 5 6 7 0
6
1 2
4 0
12 7 12 12
3
1 3
样例解释
样例 1 中,(1,2)、(1,3)、(1,5)、(2,3)、(2,5)、(3,5) 的位差均为 2,共 6 个合格配对,其中字典序最小的是 (1,2)。
样例 2 中,位差为 0 表示两个状态码完全相同,三个数值为 12 的位置两两可以配对,共 3 对,最小为 (1,3)。
数据范围
2 ≤ n ≤ 2000,0 ≤ k ≤ 8,0 ≤ ai ≤ 255。合格配对总数不超过 1999000。