ants c语言 思路,10714 - Ants(贪心)

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

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

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

代码:

#include

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;

}

原文:http://blog.csdn.net/u012997373/article/details/36631823

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值