好水的一道题——蚂蚁

先来链接:https://www.cnblogs.com/liuyuhao040610/p/11252536.html

OK,为什么说他水先看代码。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 int main(){
 5     //freopen("a.in","r",stdin);
 6     int t;scanf("%d",&t);
 7     while(t--){
 8         int n,m;scanf("%d%d",&n,&m);
 9         int Min=0,Max=0;
10         for(int i=1;i<=m;i++){
11             int x;scanf("%d",&x);
12             Max=max(Max,max(x,n-x));
13             Min=max(Min,min(x,n-x));
14         }
15         printf("%d %d
",Min,Max);
16     }
17     return 0;
18 } 

有没有一种初学者的感受。哈哈哈哈哈哈哈。

OK,下面是分析:

我们先看题:这里是说每只蚂蚁互相碰到后就会掉头,然后每只蚂蚁间持续这样,直到它们都掉下去,我们想一想,两只蚂蚁碰头后又返回,不就像互相继承了对方的方向吗???

OK,看图就明白了。

呵呵,是不是很形象。

我们可以这样形象的理解:蚂蚁一和蚂蚁二身体是中空的,它们互相穿过了对方,只不过交换了对方的名号而已,,,

其实,说了这么多,我只是想让你想明白一点:

蚂蚁都是一样的,所以当两只蚂蚁相遇时转向跟没转向也是一样的,因为每只蚂蚁都会继承另一只蚂蚁的方向,所以可以视为蚂蚁方向没有变过,所以最短时间就是所有蚂蚁距端点最近距离的最大值,最长时间就是所有蚂蚁距端点最远距离的最大值。

OK,此题完结。

原文地址:https://www.cnblogs.com/DZN2004/p/12694202.html