forked from kdn251/interviews
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAnts.java
97 lines (68 loc) · 3.12 KB
/
Ants.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When
// a walking ant reaches an end of the pole, it immediatelly falls off it. When two ants meet they turn
// back and start walking in opposite directions. We know the original positions of ants on the pole,
// unfortunately, we do not know the directions in which the ants are walking. Your task is to compute
// the earliest and the latest possible times needed for all ants to fall off the pole.
// Input
// The first line of input contains one integer giving the number of cases that follow. The data for each
// case start with two integer numbers: the length of the pole (in cm) and n, the number of ants residing
// on the pole. These two numbers are followed by n integers giving the position of each ant on the pole
// as the distance measured from the left end of the pole, in no particular order. All input integers are
// not bigger than 1000000 and they are separated by whitespace.
// Output
// For each case of input, output two numbers separated by a single space. The first number is the earliest
// possible time when all ants fall off the pole (if the directions of their walks are chosen appropriately)
// and the second number is the latest possible such time.
// Sample Input
// 2
// 10 3
// 2 6 7
// 214 7
// 11 12 7 13 176 23 191
// Sample Output
// 4 8
// 38 207
import java.util.Scanner;
/**
* Created by kdn251 on 2/22/17.
*/
public class Ants {
public static void main(String args[]) throws Exception {
//initialize buffered reader
Scanner sc = new Scanner(System.in);
//initialize test cases
int testCases = sc.nextInt();
//declare current ant
int currentAnt;
while(testCases > 0) {
//initialize length of rod and number of ants
int length = sc.nextInt();
int numberOfAnts = sc.nextInt();
//initialize min and max to zero
int min = 0;
int max = 0;
//iterate while there are still remaining ants to process
while(numberOfAnts > 0) {
//read in current ant
currentAnt = sc.nextInt();
//calculate whether ant is closer to left side of rod or right side of rod
currentAnt = currentAnt < length - currentAnt ? currentAnt : length - currentAnt;
//update minimum time to most restrictive ant minimum time
if(currentAnt > min) {
min = currentAnt;
}
//update maximum time to most restrictive ant maximum time
if(length - currentAnt > max) {
max = length - currentAnt;
}
//decrement number of ants remaining
numberOfAnts--;
}
//print min and max of current test case
System.out.println(min + " " + max);
//decrement number of test cases remaining
testCases--;
}
}
}
//source: https://github.com/morris821028/UVa/blob/master/volume107/10714%20-%20Ants.cpp