所有小行星速度相同,所以只有「左边向右、右边向左」才会撞到。用栈从左到右模拟还活着的小行星。
有 n 颗小行星位于同一条直线上,第 i 颗小行星的位置按照数组中的顺序从左到右排列。
使用整数数组 asteroids 表示这些小行星,其中 asteroidsi 的绝对值表示第 i 颗小行星的大小,正负号表示其移动方向:
所有小行星都以相同的速度移动。
当两颗运动方向相反的小行星发生碰撞时,大小较小的小行星会爆炸。如果两颗小行星大小相同,则两颗小行星都会爆炸。
两颗移动方向相同的小行星永远不会发生碰撞。
一次碰撞结束后,剩余的小行星仍可能继续与其他小行星发生碰撞。
请计算所有碰撞结束后剩余的小行星,并按照它们原本的相对顺序输出。
第一行输入一个整数 n,表示小行星的数量。
第二行输入 n 个整数 asteroidsi,表示每颗小行星的大小和移动方向,相邻整数之间用空格分隔。
2≤n≤104
−1000≤asteroidsi≤1000
asteroidsi=0
第一行输出一个整数 m,表示所有碰撞结束后剩余的小行星数量。
如果 m>0,第二行输出 m 个整数,表示剩余的小行星,并保持它们原本的相对顺序,相邻整数之间用空格分隔。
如果 m=0,则只输出一行 0。
输入
3
5 10 -5
输出
2
5 10
说明
小行星 10 与小行星 −5 相向运动并发生碰撞。
由于 ∣10∣>∣−5∣,因此小行星 −5 爆炸,小行星 10 保留下来。
小行星 5 和 10 都向右移动,不会发生碰撞。
最终剩余 2 颗小行星,分别为 5 和 10。
输入
2
8 -8
输出
0
说明
小行星 8 和 −8 相向运动并发生碰撞。
由于两颗小行星大小相同,因此它们都会爆炸。
最终没有小行星剩余。
输入
3
10 2 -5
输出
1
10
说明
小行星 2 首先与小行星 −5 发生碰撞。
由于 ∣2∣<∣−5∣,小行星 2 爆炸,小行星 −5 继续向左移动。
随后小行星 10 与小行星 −5 发生碰撞,由于 ∣10∣>∣−5∣,小行星 −5 爆炸。
最终只剩下小行星 10。
输入
6
3 5 -6 2 -1 4
输出
3
-6 2 4
说明
小行星 −6 向左移动,与其左侧向右移动的小行星发生碰撞。
它首先摧毁小行星 5,随后继续摧毁小行星 3,因此 −6 被保留下来。
之后小行星 2 与小行星 −1 发生碰撞,小行星 −1 爆炸。
小行星 2 和小行星 4 都向右移动,不会发生碰撞。
最终剩余的小行星为 −6、2 和 4。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册