码迷,mamicode.com
首页 > 其他好文 > 详细

《杀蚂蚁》有感

时间:2016-10-16 09:36:25      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

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

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

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

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

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

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

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

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

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

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

最后贴个代码:

 

16.10.16 Sun.

《杀蚂蚁》有感

标签:

原文地址:http://www.cnblogs.com/hzoier/p/5965876.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!