Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // OK B region first day 16/17 https://informatics.mccme.ru/mod/statements/view3.php?id=24702&chapterid=113440#
- #include <iostream>
- #include <vector>
- #include <limits>
- int main() {
- uint64_t n;
- size_t a, b, c;
- std::cin >> n >> a >> b >> c;
- std::vector<std::vector<std::vector<uint64_t>>> m(a + 1);
- for (size_t i = 0; i <= a; i++) {
- m[i].resize(b + 1);
- for (size_t j = 0; j <= b; j++) {
- m[i][j].resize(c + 1);
- for (size_t k = 0; k <= c; k++) {
- m[i][j][k] = std::numeric_limits<uint64_t>::max();
- }
- }
- }
- m[0][0][0] = n;
- for (int32_t i = 0; i <= a; i++) {
- for (int32_t j = 0; j <= b; j++) {
- for (int32_t k = 0; k <= c; k++) {
- if (i + j + k == 0) continue;
- if (i != 0) {
- m[i][j][k] = m[i - 1][j][k] / 2;
- }
- if (j != 0 && m[i][j][k] > (m[i][j - 1][k] + 1) / 2) {
- m[i][j][k] = (m[i][j - 1][k] + 1) / 2;
- }
- if (k != 0 && m[i][j][k] > (m[i][j][k - 1] - 1) / 2) {
- m[i][j][k] = (m[i][j][k - 1] - 1) / 2;
- }
- }
- }
- }
- std::cout << m[a][b][c];
- return 0;
- }
Add Comment
Please, Sign In to add comment