#6569. 演示关卡 (Платформа: демо ниво)
演示关卡 (Платформа: демо ниво)
题目名称:平台:演示关卡 (Платформа: демо ниво)
来源:马其顿编程竞赛(Macedonian Programming Contests)
题目背景
在 2D 平台游戏中,你最初拥有一个位于屏幕上的水平平台,长度为 。我们可以将其看作数轴上的区间 。 随后,有 条线段依次从上方落下。每条落下的线段用区间 表示,它与当前平台的相对位置决定了它的命运:
- 粘贴(Stick):如果线段至少有一半的长度位于当前平台的范围内,它就会粘在平台上。
- 如果线段超出平台左右边界,它会延伸平台的长度。平台的新边界将变为原来的边界与该线段边界的并集。
- 坠落(Fall):如果线段有超过一半的长度位于平台左侧以外或右侧以外,它就会从旁边掉下去。
- 粉碎(Shatter):如果线段同时超出了平台的左边界和右边界(即左边凸出一部分,右边也凸出一部分),它会破碎消失。
注意:一旦有线段粘在平台上,平台的范围 就会更新。后续下落的线段将以更新后的平台范围作为参考。
输入格式
- 第一行:两个整数 () 和 ()。 是线段数量, 是初始平台的右端点(初始范围为 )。
- 接下来的 行:每行两个整数 和 (),表示依次落下的线段左右端点。
输出格式
- 输出一个整数:成功粘在平台上的线段总数。
样例分析
输入:
7 5
2 4
-1 6
-3 3
6 7
1 8
6 7
7 10
执行过程(初始平台:[-0, 5]):
[2, 4]:完全在[0, 5]内。粘贴。平台保持[0, 5]。[-1, 6]:左边凸出 ,右边凸出 。粉碎。[-3, 3]:总长 6。重合部分为[0, 3](长 3)。正好是一半。粘贴。平台更新为[-3, 5]。[6, 7]:完全在[-3, 5]右侧。坠落。[1, 8]:总长 7。重合部分为[1, 5](长 4)。超过一半(3.5)。粘贴。平台更新为[-3, 8]。[6, 7]:现在完全在[-3, 8]内。粘贴。平台保持[-3, 8]。[7, 10]:总长 3。重合部分为[7, 8](长 1)。小于一半(1.5)。坠落。
结论: 共有 4 条线段成功粘贴。输出 4。
版权信息:整理自 Macedonian Programming Contests 往届竞赛题目。