题目链接POJ No.1852
POJ不支持C++的万能头文件#include <bits/stdc++.h>
问题分析:
1.最短时间:要是时间最短,则所以蚂蚁不会相遇且方向为朝向最近端点的一侧
2.最长时间:如果两只蚂蚁相遇,假设他们交叉走,每只蚂蚁的运动均看作相互独立,最长时间只要求蚂蚁到顶端的距离最大即可
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
#define Max 1000000
int a[Max];
int main()
{
int L,n,i,minT = 0,maxT = 0;
cin >> L >> n;
for(i = 0;i< n;i++)
{
cin >> a[i];
minT = max(minT,min(a[i],L - a[i]));
maxT = max(maxT,max(a[i],L - a[i]));
}
cout << "最短时间:" << minT << endl;
cout << "最长时间:" << maxT << endl;
return 0;
}
测试结果:
时间复杂度:O(n)
Java代码:
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int L = sc.nextInt();
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0;i < n;i++) {
arr[i] = sc.nextInt();
}
int minT = 0;
for(int i = 0;i < n;i++) {
minT = Math.max(minT, Math.min(arr[i], L-arr[i]));
}
int maxT = 0;
for(int i = 0;i < n;i++) {
maxT = Math.max(maxT, Math.max(arr[i], L-arr[i]));
}
System.out.println(minT + " " + maxT);
sc.close();
}
}