zoukankan      html  css  js  c++  java
  • [Luogu P1367] 蚂蚁

    eg 1: POJ Ants   P1007 独木桥

    蚂蚁的军队在长度lcm的水平杆上行走,每个具有1cm / s的恒定速度。当一个行走的蚂蚁到达杆的一端,它立即掉落。当两只蚂蚁相遇时,他们返回,开始朝着相反的方向走。我们知道蚂蚁在杆子上的原始位置,不幸的是,我们不知道蚂蚁行走的方向。你的任务是计算所有蚂蚁脱离杆子所需的最短和最长的可能时间。

    分析:由于每只蚂蚁的速度相等,所以蚂蚁之间是完全一样的,两只蚂蚁相遇后再反向,可以看做相遇后继续往前走,那么所有蚂蚁脱离杆子最短的时间,就是每只蚂蚁沿离杆近的一段走的最长时间,所有蚂蚁脱离杆子的最长时间,就是每只蚂蚁沿离杆远的一段走的最长时间。

    minn = max(min(v[i] - 0,l + 1 - v[i]),minn);
    maxx = max(max(v[i] - 0,l + 1 - v[i]),maxx);

    eg 2: Luogu  P1367 蚂蚁

    有许多蚂蚁在一根无限长的木棍上,每一只蚂蚁都有一个初始位置和初始朝向(任意两只蚂蚁的初始位置不同)。蚂蚁们以每秒一个单位的速度向前移动,当两只蚂蚁相遇时,它们会掉头(掉头时间忽略不计)。现给出每只蚂蚁的初始位置和初始朝向,请你计算出它们在t秒后的位置和朝向。
     
    分析:在此题中我们就不能把每只蚂蚁看做一样的了,但我们发现,运动前后每只蚂蚁的相对位置顺序是不变的,就可以以此求解了。
     
    for(int i=1;i<=n;i++){
        cin>>k[i].a>>k[i].b;
        r[i] = k[i];
        r[i].order = i;
        k[i].a += t*k[i].b;
        r[i].bump = k[i].bump = 0;
    }
        
    sort(k+1,k+1+n,cmp); //按最后的位置排序     sort(r+1,r+1+n,cmp); //按初始位置排序 
        
    for(int i=1;i<=n;i++){
            k[i].order = r[i].order; //得到初始位置的顺序 
    }
        
    for(int i=1;i<=n;i++){
        if(k[i].a == k[i+1].a)
            k[i].bump = 1,k[i+1].bump = 1;
    }
        
    sort(k+1,k+1+n,cmpp);
        
    for(int i=1;i<=n;i++){
        if(k[i].bump)
            printf("%d 0
    ",k[i].a);
        else printf("%d %d
    ",k[i].a,k[i].b);
    }
     
  • 相关阅读:
    python Json报错json.decoder.JSONDecodeError
    jupyter notebook改变行间图片大小
    SVM算法核函数的选择
    Linux中长时间运行程序的方法
    python通过多线程并获取返回值
    python多进程multiprocessing Pool相关问题
    pandas.read_sql_query()读取数据库数据用chunksize的坑
    Docker学习——Dockerfile
    Android之自定义ListView(一)
    Java编程思想——初始化与清理
  • 原文地址:https://www.cnblogs.com/Cindy-Chan/p/11252359.html
Copyright © 2011-2022 走看看