1. 程式人生 > >Ants POJ

Ants POJ

題目:傳送門(又水了一道題xufu)

一隊螞蟻在一根水平杆上行走,每隻螞蟻固定速度 1cm/s. 當一隻螞蟻走到杆的盡頭時,立即從稈上掉落. 當兩隻螞蟻相遇時它們會掉頭向相反的方向前進. 我們知道每隻螞蟻在杆上的初始位置, 但是, 我們不知道螞蟻向哪個方向前行. 你的任務是計算所有螞蟻都杆上掉落可能的最短時間和最長時間.

Input

第一行包含一個整數,給出測試例項數量. 每組資料開始有兩個整數: 杆的長度 (單位:cm) 和杆上螞蟻數量 n. 之後是 n 個整數給出每隻螞蟻從杆的最左邊開始的位置, 且是無序的. 輸入的每個整數都不大於 1000000 ,兩個數字用空格分開.

Output

對於每組輸入輸出兩個整數. 第一個整數表示所有螞蟻從杆上掉落可能的最短時間(如果它們前行方向選擇得當) ,第二個整數表示可能的最長時間.

這一道是個思維題,看出來了就是水題,看不出來就是難題。

思路:把螞蟻相撞再掉頭看成相錯開,再繼續前進,這樣題目的解題思路就很明瞭了。

code:

//https://vjudge.net/problem/POJ-1182
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cmath>

using namespace std;

int main()
{
	int t;
	int n,k;
	int d;
	
	scanf("%d",&t);
	
	while(t--)
	{
		int mi,ma;
		int i;
		
		scanf("%d%d",&n,&k);
		
		scanf("%d",&mi);
		ma=max(n-mi,mi);
		mi=min(n-mi,mi);
		
		for(i=1;i<k;i++)
		{
			int x;
			scanf("%d",&x);
			ma=max(max(n-x,x),ma);
			mi=max(min(n-x,x),mi);
		}
		
		printf("%d %d\n",mi,ma);
		
	}
	
	return 0;
}