首页 > 代码库 > 10714 - Ants(贪心)

10714 - Ants(贪心)


题目:10714 - Ants


题目大意:一个长度为l的板上,分布着许多的蚂蚁,每只蚂蚁的位置都会给出但是方向不缺定,如果两只蚂蚁碰上了,就会朝各自相反的方向前进。问这样所有的蚂蚁都跌落木板的最短时间和最长时间。


解题思路:最短时间的话就是每只蚂蚁都朝着各自离两端最近的方向前进,最后取这些最近的位置的最大值,就是最短时间。这样的话两只蚂蚁是不会碰到的,因为某只蚂蚁的前方那只蚂蚁要么和这只同向,要么反向;后面的蚂蚁也是一样的情况。所以不会碰到。

最长的时间的话,其实就是离两端的其中一端最远的那只蚂蚁花费的时间。这里虽说两只蚂蚁可能会碰到,但是两只蚂蚁碰到的话就朝着相反的方向前进,这样的话就相当与和它碰头的那只蚂蚁帮它走完它本来要走的路,相当于接力。(可以会经历这样的接力很多次,但是最终还是走了离两端最远的那只蚂蚁要走的距离,只是接力的走完)。


代码:

#include <stdio.h>

const int N = 1000005;
int s[N];

int max (const int x, const int y) {
	
	return x > y ? x : y;
}
	
int min (const int x, const int y) {

	return x < y ? x: y;
}

int main () {
	
	int t;
	int l, n;
	scanf ("%d", &t);
	while (t--) {
		
		scanf ("%d%d", &l, &n);
		for (int i = 0; i < n; i++) 
			scanf ("%d", &s[i]);

		int minlen, maxlen;
		minlen = maxlen = -1;

		for (int i = 0; i < n; i++) {
			
			minlen = max (minlen, min (s[i], l - s[i]));
			maxlen = max (maxlen, max (s[i], l - s[i])); 
		}
		printf ("%d %d\n", minlen, maxlen); 
	}
	
	return 0;
}