class
Main {
static
int
getBoxes(
int
R,
int
Y,
int
A,
int
B,
int
mid) {
int
firstWay = mid;
int
remainingRedBalls = (R - (A * mid));
int
remainingYellowBalls = (Y - (B * mid));
int
secondWay = Math.min(remainingRedBalls / B,
remainingYellowBalls / A);
return
firstWay + secondWay;
}
static
int
solve(
int
R,
int
Y,
int
A,
int
B) {
int
lo =
0
, hi = Math.min(R / A, Y / B);
while
(hi - lo >
2
) {
int
mid1 = lo + (hi - lo) /
3
;
int
mid2 = hi - (hi - lo) /
3
;
int
res1 = getBoxes(R, Y, A, B, mid1);
int
res2 = getBoxes(R, Y, A, B, mid2);
if
(res1 == res2) {
lo = mid1;
hi = mid2;
}
else
if
(res1 < res2) {
lo = mid1;
}
else
{
hi = mid2;
}
}
int
res =
0
;
while
(lo <= hi) {
res = Math.max(res, getBoxes(R, Y, A, B, lo));
lo +=
1
;
}
return
res;
}
public
static
void
main(String[] args) {
int
R =
10
, Y =
12
, A =
2
, B =
5
;
System.out.println(solve(R, Y, A, B));
}
}