[POJ] Ants
http://poj.org/problem?id=1852
蚁书的第一道POJ题目, 我刚开始陷入了如何求最大时间的陷阱上, 实际上, 两蚂蚁相遇后返回都掉下去的时间是和他们各自朝离自己最远的一端走然后掉下去的时间是一样的.
1 #include <algorithm> 2 #include <cstdio> 3 #include <queue> 4 #include <vector> 5 #include <cstring> 6 #include <set> 7 #include <string> 8 using namespace std; 9 10 #define MAX_NUM 1000001 11 12 int arr[MAX_NUM] = {0}; 13 int num = 0; 14 int n = 0; 15 int L = 0; 16 17 float abs(float n) 18 { 19 return (n >= 0 ? n : -n); 20 } 21 22 void solve() 23 { 24 float h = L / 2.0; 25 int minindex = 0; 26 int maxindex = 0; 27 for (int i = 1; i < n; ++i) { 28 if (abs(arr[i] - h) > abs(arr[maxindex] - h)) { 29 maxindex = i; 30 } 31 if (abs(arr[i] - h) < abs(arr[minindex] - h)) { 32 minindex = i; 33 } 34 } 35 if (arr[minindex] >= h) { 36 printf("%d ", L - arr[minindex]); 37 } else { 38 printf("%d ", arr[minindex]); 39 } 40 if (arr[maxindex] >= h) { 41 printf("%d\n", arr[maxindex]); 42 } else { 43 printf("%d\n", L - arr[maxindex]); 44 } 45 } 46 47 int main() 48 { 49 scanf("%d", &num); 50 for (int i = 0; i < num; ++i) { 51 scanf("%d%d", &L, &n); 52 memset(arr, 0, MAX_NUM); 53 for (int j = 0; j < n; ++j) { 54 scanf("%d", &arr[j]); 55 } 56 solve(); 57 } 58 return 0; 59 }