poj1852 螞蟻

題目名稱:

一羣螞蟻在一根長L釐米的水平杆子上行走,每個螞蟻的速度恆定爲1釐米/秒。當一隻行走的螞蟻到達極點時,它馬上就會從上面掉下來。當兩隻螞蟻相遇時,它們會掉頭朝相反的方向走。我們知道螞蟻在杆子的最初位置,但是不知道螞蟻行走的方向,最後計算所有螞蟻從杆子墜落的最早和最遲的可能時間。

輸入要求:

第一行包含一個整數,表示實驗的次數。第二行有兩個數,分別表示杆子的長度和螞蟻的數量,第三行表示每個螞蟻的座標。

輸出要求:

對於每種輸入情況,輸出兩個數字(用空格符分開),分別表示所有螞蟻從杆子上掉下來的最早可能的時間(如果它們走路的方向選對了的話)和最晚可能的時間。

思路

由於螞蟻的方向不知道,想要搜索每隻螞蟻的方向以及相遇情況,數據量太大,因爲每隻螞蟻都是相同的,在螞蟻相遇的時候,可以看做螞蟻還是按照原來的方向行走,按照這個思路的話,那麼掉下來的最早的時間就是所有螞蟻距離兩邊的最小值裏面的最大值,最晚時間就是距離兩邊的最遠的最大值

代碼如下

#include<stdio.h>
int max(int  x,int y) 
{
	return x>y? x:y;
}
int min(int  x,int y)
{
	return x<y? x:y;
}
int main(){
	int n;
	int zuobiao[10000];//定義座標數組 
	scanf("%d",&n);//輸入實驗次數 
	int mintime=0;//定義最早時間 
	int maxtime=0;//定義最晚時間 
	while(n--){
		int L,m;//定義杆子長度和螞蟻數量 
		scanf("%d%d",&L,&m);
		for(int i=0;i<m;i++)//輸入每個螞蟻的座標 
			scanf("%d",&zuobiao[i]);
		for(int i=0;i<m;i++)
		{
			mintime=max(mintime,min(zuobiao[i],L-zuobiao[i]));//先求螞蟻距離到兩邊的最小值,然後再求所有螞蟻到兩邊距離最小值裏面的最大值 
			maxtime=max(maxtime,max(zuobiao[i],L-zuobiao[i])); //先求螞蟻距離到兩邊的最大值,然後再求所有螞蟻到兩邊距離最大值裏面的最大值 
		 }
		printf("%d %d\n",mintime,maxtime); 
	}
	return 0;	
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章