import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static long n, m;
static long[] v, v2;
static final long INF = 1000000000000000099L;
static boolean czy(long x) {
long a = 0;
for (int i = 0; i < n; i++) {
v[i] = Math.max(v[i], v2[i]);
if (m * v[i] >= x) {
a += (x + v[i] - 1) / v[i];
} else {
a += m + (x - m * v[i] + v2[i] - 1) / v2[i];
}
if (a > INF) return false;
}
return a <= m * n;
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
v = new long[(int) n];
v2 = new long[(int) n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
v[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
v2[i] = Integer.parseInt(st.nextToken());
}
long pocz = 0;
long kon = INF;
while (pocz != kon) {
long mid = (pocz + kon + 1) / 2;
if (czy(mid)) {
pocz = mid;
} else {
kon = mid - 1;
}
}
System.out.println(pocz);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |