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~~~
风也很温柔