题目的意思就是在一段线上有很多只蚂蚁,每只蚂蚁可以`向左或者向右爬。碰头的话就向反方向继续爬。
输入第一个数字是测试组数,第二行是绳子长度,和蚂蚁数量
接下去一行是每只蚂蚁的位置。
问蚂蚁全部爬下绳子所需点的最长时间和最短时间。
刚开始有想过用模拟,但后来发现根本不需要,一个贪心就解决了。两只蚂蚁碰头其实不影响,可以当做插身而过继续爬。
所以最长的时间肯定是最左边的爬到右端点,或者最右边爬的到左端点中费时较长的一个。
而最短的时间肯定是在中点左边最接近的那只爬到左端点,或者中点右边最接近的那只爬到右端点中,时间较长的一只。
直接找,输出就行了。。。
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1000000 + 5;
int Case;
int pos[N];
int n;
int main() {
double len;
int num;
int shor;
int lon;
cin >> Case;
while (Case--) {
cin >> len >> num;
for ( int i = 0 ; i < num ; i++) {
cin >> pos[i];
}
sort(pos , pos + num);
double mid = len / 2;
lon = len - pos[0] > pos[num - 1] ? len - pos[0] : pos[num - 1];
for (int i = 0 ; i < num ;i++) {
if (pos[i] <= mid )
shor = pos[i];
else {
if ( len - pos[i] > shor ) {
shor = len - pos[i] ;
}
break;
}
}
cout << shor << " " << lon << endl;
}
}