题目链接:
https://vjudge.net/problem/UVA-10714
题目大意:
给你一个长为L厘米的木棍在上面有n只蚂蚁,蚂蚁的爬行时间均为1厘米/秒,两只蚂蚁先遇会立即调转方向,调转时间不久,并给出每只蚂蚁的位置x[i],问你所有蚂蚁都掉下木棍的最少时间和最长时间。
思路:
两只蚂蚁掉头和两只蚂蚁擦肩而过是等价的,所以问题就可以简化成所有蚂蚁掉下去的时间,而蚂蚁之间只会擦身而过,互不干扰。
最小时间就是所有蚂蚁掉下的最小时间中的最大值
最大时间就是所有蚂蚁掉下的最大时间中的最大值
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include<cstdio> 5 #include<cstring> 6 #define FOR(i, a, b) for(int i = a; i < b; i++) 7 using namespace std; 8 const int INF = 1e9+7; 9 int n, T, m; 10 int a[1000005]; 11 int main() 12 { 13 cin >> T; 14 while(T--) 15 { 16 cin >> n >> m; 17 for(int i = 0; i < m; i++)cin >> a[i]; 18 int ansmin = 0, ansmax = 0; 19 for(int i = 0; i < m; i++) 20 { 21 ansmin = max(ansmin, min(a[i], n - a[i])); 22 ansmax = max(ansmax, max(a[i], n - a[i])); 23 } 24 cout<<ansmin<<" "<<ansmax<<endl; 25 } 26 return 0; 27 }