edu 161D
限时每日一题day23。看了十几分钟感觉只能模拟,看题解后还真是这样。
\(O(n^{2})\) 的链表直接暴力模拟很好想,考虑怎么优化:
优化核心在于在每一轮模拟的过程中,不能直接暴力检查所有仍然存活的怪物,而需要在每一轮中预处理出真正可能在下一轮中被删的怪物集合。
要注意到一个性质:如果在某一轮中,怪物 \(i\) 没有被删,且其左右两侧的邻居都没有被删,那么可以确定怪物 \(i\) 在下一轮中也不会被删除。那么在下一轮就没有必要再去检查这只怪物。
因此,若一个怪物在本轮中没有被删除,则它在下一轮可能会被删除的条件之一是:本轮其左右邻居中的某一个被删除。因此,当某个怪物被删除时,将它的左右邻居加入待删集合(类似 \(bfs\) 扩展)。由于每个怪物只会被删除一次,因此加入集合的总次数不会超过 \(2n\)。总复杂度 \(O(n)\)。
code