1. 程式人生 > >ACM:POJ-1852 Ants

ACM:POJ-1852 Ants

如果直接用暴力然後大數儲存是可以的,但是由於每個螞蟻都會有不確定的左右兩個方向,那麼最後當螞蟻數量n足夠大時,最後的時間無疑是指數級的,即2的n次冪。

所以需要考慮進一步的優化演算法。

那麼首先對於最短的時間,顯然只需要每個螞蟻直接往離它近的那一端走即可,這樣的情況下是不會有螞蟻相向而相遇的。

然後對於最長的時間,需要先看一下當兩個螞蟻相向相遇時發生的情況:

所以無論是最短時間還是最長時間,只需要對每一個螞蟻檢查一次即可。

程式碼如下:

importjava.util.Scanner;
import java.lang.*;

public class Main {

    final static int 
Maxnum = 1000002; static int sum[] = new int[Maxnum]; static Scanner input = new Scanner(System.in); public static void main(String[] args){ int case1=input.nextInt(); for (int x=0;x<case1;x++){ int l=input.nextInt(); //樹枝長度 int n=input.nextInt(); //螞蟻數量 int minT=0
,maxT=0; //最小時間和最大時間 for (int i=0;i<n;i++){ //迴圈輸入n個螞蟻的位置 sum[i]=input.nextInt(); } for (int i=0;i<n;i++){ minT = Math.max(minT,(Math.min(sum[i],l-sum[i]))); } for (int i=0;i<n;i++){ maxT = Math.max(maxT,(Math.max
(sum[i],l-sum[i]))); } System.out.println(minT+" "+maxT); } } }