Poj1852(Ants)

Ants

样例

题目分析:

  • 首先很容易想到一个穷竭搜索(暴搜)算法,即枚举所有蚂蚁的初始朝向的组合,这可以利用递归函数实现。每只蚂蚁的初始朝向都有2种可能,n只蚂蚁就是2×2×…×2=2^n种。如果n比较小,这个算法还是可行的,但指数函数随着n的增长会急剧增长。
  • 首先对于最短时间,看起来所有蚂蚁都朝向较近的端点走会比较好。事实上,这种情况下不会发生两只蚂蚁相遇的情况,而且也不可能在比此更短的时间内走到竿子的端点。
  • 思考最长时间的情况,让我们看看蚂蚁相遇时会发生什么。



    事实上,可以知道两只蚂蚁相遇后,当它们保持原样交错而过继续前进也不会有任何问题。这样看来,可以认为每只蚂蚁都是独立运动的,所以要求最长时间,只要求蚂蚁到竿子端点的最大距
    离就好了。
    这样,不论最长时间还是最短时间,都只要对每只蚂蚁检查一次就好了,这是O(n)时间的算法.

int L, n;
int x[MAX_N];
void solve()
{
    // 计算最短时间
    int minT = 0;
    for (int i = 0; i < n; i++)
    {
        minT = max(minT, min(x[i], L - x[i]));
    }
    // 计算最长时间
    int maxT = 0;
    for (int i = 0; i < n; i++)
    {
        maxT = max(maxT, max(x[i], L - x[i]));
    }
    printf("%d %d\n", minT, maxT);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 参见贪心算法——最短路径Dijkstra算法参见动态规划 目录 0.最短路径问题0.1 最短路径问题描述 0.1....
    王侦阅读 4,946评论 1 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,242评论 19 139
  • 蚂蚁几乎没有视力,但他们却能够在黑暗的世界中找到食物,而且能够找到一条从洞穴到食物的最短路径。它们是如何做到的呢?...
    大闲人柴毛毛阅读 5,312评论 2 9
  • 严玲阅读 143评论 0 0
  • 两年之前,我刚刚踏入大学,以为自己可以在这里的生活会像电影里一样美好,不顾一切冲出高中的束缚以为会体会到什么才是诗...
    绅士与喵阅读 660评论 4 4