題目大意:很多的螞蟻都在長(zhǎng)度為L(zhǎng)(cm)的桿子上爬行,它們的速度都是1cm/s,到了棒子終端的時(shí)候,螞蟻就會(huì)掉下去。如果在爬行途中遇到其他螞蟻,兩只螞蟻的方向都會(huì)逆轉(zhuǎn)。已知螞蟻在棒子的最初位置坐標(biāo),但是我們不知道他們會(huì)往哪一個(gè)方向爬。請(qǐng)求出所有螞蟻掉下去的最短時(shí)間和最長(zhǎng)時(shí)間。
題目分析:雖然當(dāng)螞蟻數(shù)量很多的時(shí)候情況會(huì)有很多種,但是先考慮小數(shù)量的分析就可以找到解決方法:如果只有兩只的話(huà),那么最短時(shí)間就是兩只螞蟻距離兩端點(diǎn)距離較小的距離中取大者就是所需最短時(shí)間,而最長(zhǎng)時(shí)間就是兩只螞蟻距離兩端點(diǎn)距離較大者中取大者就是所需最長(zhǎng)時(shí)間,例如,長(zhǎng)度為10,一只在距離左端2的位置,一只在距離左端6的位置,則最短時(shí)間為max(min(2,10-2),min(6,10-6))為4,最長(zhǎng)時(shí)間為max((max(2,10-2),max(6,10-6)))為8其實(shí)就是兩只相向而行,當(dāng)相遇后,都轉(zhuǎn)為逆向,則時(shí)間為從相遇點(diǎn)到端點(diǎn)距離大者與相遇前所需時(shí)間,分析實(shí)際就是2到10的距離,當(dāng)螞蟻數(shù)量增加時(shí),情況相同。
則需要時(shí)間最長(zhǎng)的的就是讓距離端點(diǎn)最近的螞蟻爬到另一個(gè)端點(diǎn)(最遠(yuǎn))所需要的時(shí)間。
也就是說(shuō),只要找出所有螞蟻與較遠(yuǎn)端比較,然后找出最大值就是所需要的最大時(shí)間。
這里需要注意的就是兩只螞蟻相遇轉(zhuǎn)向的那個(gè)梗。事實(shí)上,可以知道兩只螞蟻相遇后,當(dāng)他們保持原樣交錯(cuò)而過(guò)繼續(xù)前進(jìn)也不會(huì)有任何問(wèn)題。這樣看來(lái),可以認(rèn)為每只螞蟻都是獨(dú)立運(yùn)動(dòng)的,所以要求最長(zhǎng)時(shí)間,只要求螞蟻到桿子端點(diǎn)的最大距離就好了。
#include <cstdio>
#include <iostream>
using namespace std;
int min_time, max_time;
int h, n, T, tmp;
int main() {
scanf("%d", &T);
while(T--) {
scanf("%d%d" , &h, &n);
min_time = 0;
max_time = 0;
for(int i=0;i<n;i++) {
scanf("%d", &tmp);
min_time = max(min_time, min(tmp, h - tmp));
max_time = max(max_time, max(tmp, h - tmp));
}
printf("%d %d\n", min_time, max_time);
}
return 0;
}
posted on 2015-02-11 15:09
JulyRina 閱讀(248)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
解題報(bào)告