Submission #1184737

#TimeUsernameProblemLanguageResultExecution timeMemory
1184737versesrevBank (IZhO14_bank)C++20
Compilation error
0 ms0 KiB
#include <iostream> #include <array> #include <map> #include <algorithm> #include <vector> #include <numeric> int main() { int n, m; std::cin >> n >> m; std::vector<int> as(n), bs(m); for (int& a : as) std::cin >> a; for (int& b : bs) std::cin >> b; std::vector<std::vector<int>> dp(m, std::vector<int>(as[0] + 1)); for (int i = 0; i < m; ++i) { for (int j = 0; j <= as[0]; ++j) { if (i == 0) dp[i][j] = j == 0 or j == bs[i]; else { dp[i][j] = dp[i - 1][j]; if (bs[i] <= j) dp[i][j] += dp[i - 1][j - bs[i]]; } } } bool ans = dp[m - 1][as[0]]; std::cout << (ans ? "YES\n" : "NO\n"); return 0; std::ranges::sort(as), std::ranges::sort(bs); std::map<std::array<int, 21>, bool> table; auto brute = [&](auto&& self, const std::array<int, 21>& state, int a_sum, int b_sum) -> bool { /* std::cout << "brute a_sum=" << a_sum << " b_sum=" << b_sum << " " << state[0] << " " << state[19] << " " << state[20] << "\n"; // */ if (table.contains(state)) return table[state]; if (b_sum < a_sum) { return table[state] = false; } if (state[0] == m) { return table[state] = (a_sum == 0); } std::array<int, 21> new_state = state; int b = bs[new_state[0]]; ++new_state[0]; for (int i = 1; i < 21; ++i) { if (b > new_state[i]) continue; new_state[i] -= b; int j = i; for (; j > 1 and new_state[j-1] > new_state[j]; --j) { std::swap(new_state[j-1], new_state[j]); } if (self(self, new_state, a_sum - b, b_sum - b)) { return table[state] = true; } for (; j != i; ++j) { std::swap(new_state[j+1], new_state[j]); } new_state[i] += b; } if (self(self, new_state, a_sum, b_sum - b)) { return table[state] = true; } return table[state] = false; }; std::array<int, 21> state; for (int i = 0; i < n; ++i) state[i] = as[i]; std::ranges::sort(state); int a_sum = std::accumulate(as.begin(), as.end(), 0); int b_sum = std::accumulate(bs.begin(), bs.end(), 0); bool ans = brute(brute, state, a_sum, b_sum); std::cout << (ans ? "YES\n" : "NO\n"); }

Compilation message (stderr)

bank.cpp: In function 'int main()':
bank.cpp:71:8: error: redeclaration of 'bool ans'
   71 |   bool ans = brute(brute, state, a_sum, b_sum);
      |        ^~~
bank.cpp:25:8: note: 'bool ans' previously declared here
   25 |   bool ans = dp[m - 1][as[0]];
      |        ^~~