标签:
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 10639 | Accepted: 4718 |
Description
Input
Output
Sample Input
2 10 3 2 6 7 214 7 11 12 7 13 176 23 191
Sample Output
4 8 38 207
Source
题意:n只蚂蚁以1cm/s的速度在长为L的棍子上爬,给出n只蚂蚁的初始距离左端的距离x,但不知道他们的爬行方向。规定两只蚂蚁相遇时,不能交错通过,只能个自反向爬回去。问所有蚂蚁落下棍子的最短时间和最长时间。
解析:这里有一个小技巧:当两只蚂蚁相遇时,我们可以认为两只蚂蚁可以直接通过,互不影响,这样就相当于两只蚂蚁跟原来的真正身份互换了一下,但是它们又没有明确要求,所以这是不影响结果的。然后再利用贪心的思想,按照对我们所求结果最有利的方向去安排个只蚂蚁的爬行方向即可。
AC代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <cstdlib> #include <ctime> #include <stack> using namespace std; #define INF 0x7fffffff #define LL long long #define MID(a, b) a+(b-a)/2 const int maxn = 1000000 + 10; int main(){ #ifdef sxk freopen("in.txt", "r", stdin); #endif // sxk int L, n, t; int a[maxn]; scanf("%d", &t); while(t--){ scanf("%d%d", &L, &n); for(int i=0; i<n; i++) scanf("%d", &a[i]); int mn = 0; for(int i=0; i<n; i++) mn = max(mn, min(a[i], L - a[i])); int mx = 0; for(int i=0; i<n; i++) mx = max(mx, max(a[i], L - a[i])); printf("%d %d\n", mn, mx); } return 0; }
标签:
原文地址:http://blog.csdn.net/u013446688/article/details/43406013