#CCSP2021A. 最近数合并

最近数合并

时间限制: 1.0 秒

空间限制: 512 MB

题目背景

在西西艾弗岛上,生活着快乐的小 C、小 S 和小 P。最近,三位小朋友在学校里学到了“两个数之间的距离”这一重要的概念。为了巩固知识,小 P 玩起了“合并最近数”的游戏。

题目描述

A={a1,a2,...,an}A=\{a_1,a_2,...,a_n\} 是一个包含 nn 个自然数(非负整数)的集合(根据集合的定义,这 nn 个数两两不同),且其中的最大值小于一个给定的正整数 kk

小 P 需要对集合 AA 中的数进行若干轮合并操作,到 AA 中仅剩一个数为止。每轮合并操作的流程如下:

  1. 选取数对 (x,y)(x,y)
  • AA 中选取数值大小最接近的两个数 xxyy,即 xy|x-y| 在所有数对中最小;
  • 如果有多个数对满足条件,则进一步选择其中 (x+y)(x+y) 最小的;
  • 考虑到 AA 中的数两两不同,按上述要求(即以 xy|x-y| 为第一关键字,(x+y)(x+y) 为第二关键字)可以选出唯一的数对 (x,y)(x,y)
  1. xxyy 合并为 zz
  • z=(x+y)modkz=(x+y)\bmod k,即将 xxyy 求和后再对 kk 取模。
  • 具体来说,首先将 xxyy 从集合 AA 中删去;如果集合 AA 不包含 zz,则再将 zz 添加回集合 AA。这保证了 AA 中的自然数始终两两不同且小于 kk

易知,小 P 的每轮合并操作会使集合 A 的规模(即包含自然数的个数)减少 1122。你需要帮小 P 搞明白,在全部合并操作结束后,进行的合并操作的总轮数和 AA 中剩下的那个数。

输入格式

从标准输入读入数据。

输入的第一行包含用空格分隔的两个正整数 nnkk

输入的第二行包含 nn 个用空格分隔的自然数 a1,a2,,ana_1,a_2,\cdots ,a_n

输出格式

输出到标准输出。

输出共两行。

第一行输出一个整数 TT,表示总共进行了 TT 轮合并操作。

第二行输出 TT 轮合并操作后 AA 中剩下的那个数。

9 10
0 1 2 4 5 6 7 8 9
7
5

样例 1 解释

第一轮:(0,1)1(0,1)\to 1,合并后 A={1,2,4,5,6,7,8,9}A=\{1,2,4,5,6,7,8,9\}

第二轮:(1,2)3(1,2)\to 3,合并后 A={3,4,5,6,7,8,9}A=\{3,4,5,6,7,8,9\}

第三轮:(3,4)7(3,4)\to 7,合并后 A={5,6,7,8,9}A=\{5,6,7,8,9\}

第四轮:(5,6)1(5,6)\to 1,合并后 A={1,7,8,9}A=\{1,7,8,9\}

第五轮:(7,8)5(7,8)\to 5,合并后 A={1,5,9}A=\{1,5,9\}

第六轮:(1,5)6(1,5)\to 6,合并后 A={6,9}A=\{6,9\}

第七轮:(6,9)5(6,9)\to 5,合并后 A={5}A=\{5\}

6 11
7 3 6 5 10 0
4
9

子任务

40%40\% 的测试数据满足 n200, k1000n\le 200,~k\le 1000

70%70\% 的测试数据满足 n2000, k105n\le 2000,~k\le 10^5

全部的测试数据满足 n105, k108n\le 10^5,~k\le 10^8,输入的 ai (1in)a_i~(1\le i\le n) 两两不同且 0ai<k0\le a_i<k