先来链接: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,此题完结。