/* -*- coding: utf-8 -*- * * 3681.cc: No.3681 蠢・・豐ク鬨ー遏ウ - yukicoder */ #include #include #include #include using namespace std; /* constant */ /* typedef */ using ui = unsigned int; /* global variables */ /* subroutines */ /* main */ int main() { int r, p, q, as[3], d; scanf("%d%d%d%d%d%d%d", &r, &p, &q, as, as + 1, as + 2, &d); sort(as, as + 3, greater()); //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); int sum = 0; // 0. use as only int x0 = min(as[2], r / p); sum += x0; as[0] -= x0, as[1] -= x0, as[2] -= x0; r -= x0 * p; //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); if (r < p) { printf("%d\n", sum); return 0; } assert(as[2] == 0); // 1. use d, as[0], as[1] (as[2] == 0) int x1 = min({as[1], d + (as[0] - as[1]), r / (q + p)}); sum += x1; as[1] -= x1; if (x1 <= d) d -= x1; else as[0] -= x1 - d, d = 0; r -= x1 * (q + p); //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); if (r < q + p) { printf("%d\n", sum); return 0; } // 2. use d, as[0] (as[1] == as[2] == 0) if (as[1] == 0) { ui q2p = (ui)q * 2 + p; int x2 = min((ui)(as[0] + d) / 3, r / q2p); sum += x2; if (x2 <= d) d -= x2; else as[0] -= x2 - d, d = 0; r -= x2 * q2p; } //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); printf("%d\n", sum); return 0; }