时间限制: 1.0 秒
空间限制: 512 MB
题目背景
在西西艾弗岛上,生活着快乐的小 C、小 S 和小 P。最近,三位小朋友在学校里学到了“两个数之间的距离”这一重要的概念。为了巩固知识,小 P 玩起了“合并最近数”的游戏。
题目描述
A={a1,a2,...,an} 是一个包含 n 个自然数(非负整数)的集合(根据集合的定义,这 n 个数两两不同),且其中的最大值小于一个给定的正整数 k。
小 P 需要对集合 A 中的数进行若干轮合并操作,到 A 中仅剩一个数为止。每轮合并操作的流程如下:
- 选取数对 (x,y):
- 从 A 中选取数值大小最接近的两个数 x 和 y,即 ∣x−y∣ 在所有数对中最小;
- 如果有多个数对满足条件,则进一步选择其中 (x+y) 最小的;
- 考虑到 A 中的数两两不同,按上述要求(即以 ∣x−y∣ 为第一关键字,(x+y) 为第二关键字)可以选出唯一的数对 (x,y)。
- 将 x 和 y 合并为 z:
- z=(x+y)modk,即将 x 和 y 求和后再对 k 取模。
- 具体来说,首先将 x 和 y 从集合 A 中删去;如果集合 A 不包含 z,则再将 z 添加回集合 A。这保证了 A 中的自然数始终两两不同且小于 k。
易知,小 P 的每轮合并操作会使集合 A 的规模(即包含自然数的个数)减少 1 或 2。你需要帮小 P 搞明白,在全部合并操作结束后,进行的合并操作的总轮数和 A 中剩下的那个数。
输入格式
从标准输入读入数据。
输入的第一行包含用空格分隔的两个正整数 n 和 k。
输入的第二行包含 n 个用空格分隔的自然数 a1,a2,⋯,an。
输出格式
输出到标准输出。
输出共两行。
第一行输出一个整数 T,表示总共进行了 T 轮合并操作。
第二行输出 T 轮合并操作后 A 中剩下的那个数。
9 10
0 1 2 4 5 6 7 8 9
7
5
样例 1 解释
第一轮:(0,1)→1,合并后 A={1,2,4,5,6,7,8,9};
第二轮:(1,2)→3,合并后 A={3,4,5,6,7,8,9};
第三轮:(3,4)→7,合并后 A={5,6,7,8,9};
第四轮:(5,6)→1,合并后 A={1,7,8,9};
第五轮:(7,8)→5,合并后 A={1,5,9};
第六轮:(1,5)→6,合并后 A={6,9};
第七轮:(6,9)→5,合并后 A={5};
6 11
7 3 6 5 10 0
4
9
子任务
40% 的测试数据满足 n≤200, k≤1000;
70% 的测试数据满足 n≤2000, k≤105;
全部的测试数据满足 n≤105, k≤108,输入的 ai (1≤i≤n) 两两不同且 0≤ai<k。