#B6. 图书馆管理员

图书馆管理员

题目描述

小雅是一名图书馆管理员,她正在整理一批新到的书籍。每本书都有一个唯一的条形码编号(正整数)。为了快速查找,她决定使用一种特殊的“哈希链”存储方式。

规则如下:

  1. 有一个长度为 MM 的数组 shelf,初始时所有位置均为 0(表示空)。
  2. 对于每本书的条形码编号 xx,计算其初始位置 pos=x(modM)pos = x \pmod M。
  3. 如果 shelf[pos] 为空(即为 0),则将书放入该位置,即 shelf[pos] = x。
  4. 如果 shelf[pos] 非空,则发生“冲突”。此时需要寻找下一个可用位置:从 pos+1pos + 1 开始向后查找(如果超过 M−1M-1 则回到 0,形成环形),直到找到第一个为空的位置为止,将书放入。
  5. 如果遍历完整个数组都没有找到空位(即数组已满),则该书无法入库,被丢弃。

小雅依次处理 NN 本书,请你告诉她,最终有多少本书成功入库?以及最后 shelf 数组的状态是什么?

输入格式

第一行包含两个整数 N,MN, M,分别表示书的数量和书架数组的长度。 第二行包含 NN 个正整数,表示依次到来的书的条形码编号。

数据范围:

  • 1≤N≤1001 \le N \le 100
  • 1≤M≤501 \le M \le 50
  • 1≤条形码编号≤100001 \le \text{条形码编号} \le 10000
  • 保证 N≥MN \ge M 的情况可能出现(即书比架子多)。

输出格式

第一行输出一个整数,表示成功入库的书本数量。 第二行输出 MM 个整数,表示最终 shelf 数组的状态,数字之间用空格隔开。

5 3
1 4 7 2 5
3
7 1 4