kdzhr

Калькулятор/перебор/2.0

Mar 21st, 2020
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. // 26 pts https://informatics.msk.ru/moodle/mod/statements/view3.php?chapterid=113440#1
  2.  
  3. # include <iostream>
  4. # include <vector>
  5.  
  6. void search(size_t &n, size_t &a, size_t &b, size_t &c, size_t &min_ans, std::vector<size_t> cur) {
  7.     if (cur.size() == a + b + c) {
  8.         size_t n_copy = n;
  9.         size_t count_a = 0;
  10.         size_t count_b = 0;
  11.         size_t count_c = 0;
  12.         for (auto i : cur) {
  13.             if (i == 0) {
  14.                 count_a++;
  15.                 n_copy /= 2;
  16.             } else if (i == 1) {
  17.                 count_b++;
  18.                 n_copy = (n_copy + 1) / 2;
  19.             } else {
  20.                 count_c++;
  21.                 if (n_copy != 0) {
  22.                     n_copy = (n_copy - 1) / 2;
  23.                 }
  24.             }
  25.         }
  26.         if (count_a == a && count_b == b && count_c == c) {
  27.             min_ans = std::min(min_ans, n_copy);
  28.         }
  29.     } else {
  30.         cur.push_back(0);
  31.         search(n, a, b, c, min_ans, cur);
  32.         cur.pop_back();
  33.         cur.push_back(1);
  34.         search(n, a, b, c, min_ans, cur);
  35.         cur.pop_back();
  36.         cur.push_back(2);
  37.         search(n, a, b, c, min_ans, cur);
  38.     }
  39. }
  40. int main() {
  41.     size_t n, a, b, c;
  42.     std::cin >> n >> a >> b >> c;
  43.     size_t ans = n;
  44.     std::vector<size_t>cur;
  45.     search(n, a, b, c, ans, cur);
  46.     std::cout << ans;
  47.     return 0;
  48. }
Add Comment
Please, Sign In to add comment