题目大意:一个长度为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; }
10714 - Ants(贪心)
时间: 2024-11-05 22:56:24