JZOJ 2158. 蚂蚁

  这个是今天早上比赛的内容,比较水给大伙们讲一下(我只会这一个

  题目大意:

n只蚂蚁以每秒1cm的速度在长为L  cm(厘米,不是lcm)的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。
例如:竿子长10cm,3只蚂蚁位置为2 6 7,最短需要4秒(左、右、右),最长需要8秒(右、右、右)

  解析(进行泼粪(剖分)操作)

    这 难道是Legendary Search????(传说中的搜索 !!!!)

    水题啊!!!!
    于是

    bfs上手

    打到一半

    啥玩意儿啊!!

    

    慢慢看慢慢看

    要轻轻的慢慢的泼粪

  懂了!!!!!!!

  这就是传说中的:

    大模拟,啊!!!!

    "Please start your AK show"

   

  考虑每只蚂蚁较复杂,我们试着转换思想

    看成蚂蚁碰头之后不回头,因为每个蚂蚁都是一样的。

      设蚂蚁位置为pi,最短时间=max(min(pi, l-pi)),最长时间=max(max(pi,l-pi))

    于是乎...............

  CODE

    

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 long long wow[90000];
 5 long long sum,sum2;
 6 long long n,l,maxn,minn;
 7 int main()
 8 {
 9     freopen("t1.in","r",stdin);
10     freopen("t1.out","w",stdout);
11         cin>>n>>l;
12         for(int i=1;i<=n;i++)
13             scanf("%d",&wow[i]);
14         for(int i=1;i<=n;i++)
15         {
16             sum=max(wow[i],l-wow[i]);
17             sum2=min(wow[i],l-wow[i]);
18             maxn=max(maxn,sum);
19             minn=max(minn,sum2);
20             
21         }
22         cout<<minn<<" "<<maxn;
23     return 0;
24 }

看到了吗!!!!

 但是太慢了!!!

  

  开O吧,(吸口臭氧)

  嫑说 是我叫你开的

!!!!!!!!!!!!!!!!!!!!!

最后

  你们懂了吗!!!

  我相信你们懂了!!

~~~~~~

see you again~~~

猜你喜欢

转载自www.cnblogs.com/WestJackson/p/11400341.html