题意是这种,有一堆蚂蚁在一根棍子上乱爬。速度都是一样的,假设它们撞到了一起就会朝反方向爬去。
把棍子长度告诉你。还有蚂蚁的数量以及它们某时的距离棍子左端的距离。要求全部蚂蚁都掉到棍子以下去
的最小可能时间和最大可能时间。
我是这样做的。
暴力就能够了。
话说,蚂蚁相撞就反过头爬,跟相撞之后继续往前爬的效果是一样的,于是乎就当做蚂蚁都是在一根独立的棍子上
自己爬自己的路好了。
无论是最小时间还是最大时间的,都是由某仅仅距离棍子左端或右端最远的蚂蚁决定。
把它找出来就好了。
我找它的方法是在读入蚂蚁位置的时候,推断每仅仅蚂蚁距离左端和右端的距离。
选择最小的那个距离作为每仅仅蚂蚁的距离,再选择这些距离中最大的那仅仅蚂蚁就是要找的那仅仅蚂蚁了,它决定了最小时间。
同理,选择最大的那个距离作为每仅仅蚂蚁的距离。再选择这些距离中最大的那仅仅蚂蚁就是要找的那仅仅蚂蚁了,它决定了最大时间。
我的AC代码例如以下:
#include<iostream> #include<algorithm> using namespace std; int main() { int exp,len,num,ant,mi,ma; scanf("%d",&exp); while(exp--) { mi=ma=-1; scanf("%d%d",&len,&num); while(num--) { scanf("%d",&ant); mi=max(mi,min(ant,len-ant)); ma=max(ma,max(ant,len-ant)); } printf("%d %d ",mi,ma); } }