1.6.2 Ants
题目

原始思路
最关键的是每只蚂蚁的朝向未知,显然,不可能用暴搜,指数级的复杂度;
所以这道题目一定要想出某个把问题简化的方法,而不是一个个去尝试答案;
最短时间很好想,让每只蚂蚁都朝着更近的端点走就好了,不会发生相遇折返的情况;
最长时间呢?一开始没有想出来,因为陷在了复杂的相遇、调头,再相遇……的过程中;但是回过头来想,整个过程显然不能直接模拟!!!
正确题解
比如先考虑两只蚂蚁,位于x1,x2;1往右,2往左;先相遇,再调头,掉下去;蚂蚁1的总路程为x1+2*(x2-x1)/2=x2;蚂蚁2的总路程为L-x2+2*(x2-x1)/2=L-x1;其实这两个路程就是他们各自沿着初始方向走到端点所需要的路程(只不过看似换成了另一个蚂蚁完成);但是我们只需要得到最长的时间就可以了,和哪一只蚂蚁走出来的没有关系!
所以其实,蚂蚁之间并没有区别!!!
相遇之后看似两只蚂蚁调了头,其实完全可以看成是蚂蚁沿着原路在走。
void solve()
{
int

蚂蚁问题的解决关键在于避免指数级复杂度的暴力搜索。最短时间解决方案是让每只蚂蚁朝离它较近的端点前进。对于最长时间,通过分析两只蚂蚁相遇和调头的过程,发现它们的总路程实际上等于它们沿初始方向走到端点的路程。因此,蚂蚁之间的区别并不影响结果,可以视为继续沿原路行走。
最低0.47元/天 解锁文章
1403

被折叠的 条评论
为什么被折叠?



