《杀蚂蚁》有感

Posted AntiLeaf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《杀蚂蚁》有感相关的知识,希望对你有一定的参考价值。

昨天下午给别人调了一会儿杀蚂蚁(炸精度了),于是乎自己心血来潮也想写写这道神题。

写代码没费多久,主要都是调代码。调了三节课,时间这么短的原因是因为我是对着标程调的(直接把下午调过了的那份代码输出调试信息然后两边手动fc……)。感觉浪费了这么一道神题。

总的来说,杀蚂蚁技术含量不高,唯一有点技术含量的就是判断线段与圆相交(计算几何)。其他的,就是个大模拟。不过细节很多,而且很多都是很难注意到的。

判断线段与圆相交的时候我用的是特殊方法(只适用于本题)。

因为蚂蚁都在整点上,而直径都是1,因此只要看那些离炮塔距离更近的蚂蚁即可。又因为是线段而不是直线,所以只有和Target蚂蚁在炮塔的同一侧的蚂蚁才会被打到,因此我就用了点积判同侧,最后再用叉积算点到直线距离。这是特殊方法,对于一般情况还是不适用的。

这题细节真心很多,而且很多都让人猝不及防。比如:

1. 所有炮塔同时开炮,所以蚂蚁被打到负血之后还可以被打,蚂蚁的死亡必须在炮塔攻击之后统一进行。

2. 小心精度问题,选择最近的蚂蚁和线段与圆相交可能炸精度(虽然对于本题来说蚂蚁都在整点上线段与圆相交不太可能炸精度),我调别人的代码调了一个多小时就是因为前者炸精度了。垃圾O2优化。

3. 蚂蚁的移动是有先后的,先动的蚂蚁可能会挡住后动的蚂蚁。

4. 扛蛋糕不一定是在走了一步之后,有那种扛蛋糕的蚂蚁死了然后原地不动的蚂蚁扛上了蛋糕的事情(我就被这玩意儿坑了)。

5. 线段与圆相交要小心写,不要写错。

6. 蚂蚁的移动要小心,真的很麻烦。

总之,虽然说是练了练代码能力,但是感觉还没有二逼平衡树、Mokia价值高(Mokia一开始打死不过,后来重写了才A的)。都怪我对着标程调,罪过罪过。

最后贴个代码:

 

16.10.16 Sun.

以上是关于《杀蚂蚁》有感的主要内容,如果未能解决你的问题,请参考以下文章

插件有感-做东西有感

相亲有感

得领跑衫有感二

无心剑英译朱熹《观书有感二首·其一》

过年有感

设计模式有感