洛谷P15350题解
为什么洛谷不可以发P15350题解?@KKKSC03
回归正题
大家还记得那场推迟了很久的比赛吧
没错,是 COCI 2025/2026 #4 UNOFFICIAL MIRROR
第一题是 《僵尸启示录》
题目传送门
宝贵的标程当然要放在最后。
如果有更好的方法,欢迎各路大佬指导!
现在,我们来看题吧。
有mmm个僵尸和kkk个炸弹,每个炸弹在离窝xxx米,爆炸半径为rrr米,在ttt秒爆炸,僵尸窝离城市n+1n+1n+1米。
题目问:有几个僵尸会进入城市?
我们可以定义一个布尔数组bbb,来存现在某个位置是否有僵尸,truetruetrue表示有,falsefalsefalse表示没有。
僵尸行进的代码我相信你们会写
新建一个变量mmm,存未出发的僵尸的数量,如果mmm为000,代表所有的僵尸都出发了。
每一次僵尸前进前判断,如果b[n]=trueb[n]=trueb[n]=true(等于号不表示赋值),就把b[n]b[n]b[n]赋值为falsefalsefalse,存答案的变量自加。
接下来使用forforfor循环和swapswapswap函数,调换数组bbb中的数据。
> 伪代码如下(CPP):
然后用一个变量iii,表示时间。如果在这个时间有炸弹刚好爆炸,那么,就把爆炸范围内的僵尸炸没(还记得之前定义的布尔数组 bbb 吗,就是把爆炸范围里的所有为111的值赋值为000,表示僵尸被炸没)。如果没有炸弹了,那么剩下的僵尸和未出发的僵尸一定会进入城市,就加入我们的答案。
判断炸弹是否爆炸的代码也简单,我相信你们也会写
如果有炸弹爆炸,新建两个变量 LLL 和 RRR ,表示炸弹爆炸的最左范围和最右范围,再用forforfor循环遍历所有地方,把这个地方的所有有僵尸地方全部清空。
对了!记得把炸弹时间按从小到大的顺序排序,不然WA了别怪我!还有,还要防止数组越界,RE了别怪我没提醒你。
> 伪代码如下(CPP):
还有一点要注意,僵尸先前进,炸弹再爆炸,不然会WA(别问我怎么知道的)。
标程
标程第25 ~ 28行用的是冒泡排序,因为冒泡排序代码短,而且题目使用冒泡排序不会超时,所以作者就使用冒泡排序了(其实是忘记快排和归排怎么写了)
其他关于标程不好的地方,欢迎各路大佬指教。谢谢大家!
码风还好,不喜勿喷。
> 标程(CPP):
谢谢参考题解!!!
打个广告:
我的洛谷团队:洛谷团队点这里。