#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。