forked from mbobesic/algorithms-playground
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHaircut.java
72 lines (57 loc) · 1.4 KB
/
Haircut.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
// link: https://code.google.com/codejam/contest/4224486/dashboard#s=p1&a=1
// name: haircut
package gcj;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Haircut {
public static void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(new File("B-large-practice.in"));
PrintWriter out = new PrintWriter(new File("B-large-practice.out"));
int T = in.nextInt();
for (int t = 0; t < T; t++) {
int b = in.nextInt();
long n = in.nextLong();
long[] m = new long[b];
for (int i = 0; i < b; i++) {
m[i] = in.nextLong();
}
long lower = 0;
long upper = 10000L * n;
while (lower < upper) {
long middle = (lower + upper) / 2;
if (getCut(middle, m) >= n) {
upper = middle;
} else {
lower = middle + 1;
}
}
long prev = getCut(lower - 1, m);
long diff = n - prev;
int result = -1;
for (int i = 0; i < m.length; i++) {
if (lower % m[i] == 0) {
diff--;
if (diff == 0) {
result = i + 1;
break;
}
}
}
out.println(String.format("Case #%d: %d", (t + 1), result));
}
in.close();
out.close();
}
private static long getCut(long middle, long[] m) {
if (middle < 0) {
return 0;
}
long result = 0;
for (int index = 0; index < m.length; index++) {
result += middle / m[index] + 1;
}
return result;
}
}