53 lines
1.0 KiB
Java
53 lines
1.0 KiB
Java
package chelper;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
|
|
import io.InputReader;
|
|
import io.OutputWriter;
|
|
import misc.SimpleSavingChelperSolution;
|
|
|
|
|
|
public class QUEUE2 extends SimpleSavingChelperSolution {
|
|
|
|
public void solve(int testNumber, InputReader in, OutputWriter out) {
|
|
wrapSolve(testNumber, in, out);
|
|
}
|
|
|
|
@Override
|
|
public void solve(int testNumber) {
|
|
long n = in.nextLong();
|
|
long m = in.nextLong() + 1;
|
|
long k = in.nextLong();
|
|
long l = in.nextLong();
|
|
|
|
long lastFree = 0;
|
|
|
|
List<Long> a = new ArrayList<>();
|
|
for (long i = 0; i < n; i++) {
|
|
a.add(in.nextLong());
|
|
}
|
|
Collections.sort(a);
|
|
a.add(k);
|
|
|
|
long minWaitTime = m * l;
|
|
|
|
for (long i : a) {
|
|
long newlyFree = (i - lastFree) / l;
|
|
lastFree += newlyFree * l;
|
|
m = Math.max(0, m - newlyFree);
|
|
|
|
if (m == 0) {
|
|
lastFree = i;
|
|
}
|
|
|
|
minWaitTime = Math.min(minWaitTime, Math.max(lastFree + m * l - i, 0));
|
|
|
|
m++;
|
|
}
|
|
|
|
out.println(minWaitTime);
|
|
}
|
|
}
|