标签:
| 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