QOJ.ac

QOJ

时间限制: 7 s 内存限制: 2048 MB 总分: 100

#8066. 轰炸

统计

你正在设计一款名为 Bombardment 的老式游戏,其目标是通过轰炸来摧毁若干个点。你目前还不确定游戏的主题,只知道核心机制应该涉及轰炸。

需要摧毁的点位于实数轴上,即每个点仅仅是一个 $x$ 坐标。轰炸是一种攻击,它会摧毁距离轰炸中心固定距离 $R$ 内的所有点。更具体地说,单次轰炸通过选择一个整数点 $X$(中心)来指定。所有位于区间 $[X - R, X + R]$ 内的点都将被摧毁。

在投入精力设计主题、添加精美图形等之前,你决定先对该游戏的一个基础版本进行测试。有趣的是,大多数测试者似乎采用了贪心策略:每次轰炸都选择能摧毁当前单次轰炸中最多点数的方案。有时,这会导致玩家使用的轰炸次数多于最少可能的轰炸次数。你希望设计一个程序来模拟这种策略,这将有助于你设计出有趣的关卡。

也就是说,你的任务是编写一个程序来模拟以下过程:只要还有剩余的点,就选择一个轰炸中心 $X$,使得该次轰炸能摧毁剩余点中数量最多的点。如果存在多个这样的 $X$ 值,则每次都选择其中最小的 $X$。

输入格式

输入的第一行包含两个整数 $N$ ($1 \le N \le 5 \times 10^5$) 和 $R$ ($1 \le R \le 10^8$)。下一行包含 $N$ 个整数,描述这些点的 $x$ 坐标,每个坐标都在范围 $[-10^8, 10^8]$ 内。多个点可能共享同一个 $x$ 坐标。此外,保证最大 $x$ 坐标与最小 $x$ 坐标之差最多为 $40 \cdot R$。

输出格式

输出的第一行包含一个整数 $B$,表示执行的轰炸次数。第二行包含 $B$ 个整数,按执行顺序描述每次轰炸的 $x$ 坐标。

样例

样例输入 1

7 1
1 2 3 3 4 4 5

样例输出 1

3
3 0 4

样例输入 2

6 1
5 -2 5 0 1 2

样例输出 2

3
1 4 -3

样例输入 3

6 2
5 -2 5 0 1 2

样例输出 3

2
0 3

样例输入 4

6 3
5 -2 5 0 1 2

样例输出 4

2
2 -5

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.