Submission #114899

#TimeUsernameProblemLanguageResultExecution timeMemory
114899mrboorgerBank (IZhO14_bank)C++14
44 / 100
1066 ms504 KiB
#include <bits/stdc++.h> #include <vector> #include <set> #include <iostream> //#pragma GCC optimize("Ofast") #define ld long double #define ll long long #define F first #define S second #define pb push_back #define mp make_pair using namespace std; //mt19937 gen(time(0)); const ll inf = 1e18 + 18; vector <int> a, b; main() { #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else // freopen("divide.in", "r", stdin); // freopen("divide.out", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; if (n > m) { cout << "NO"; return 0; } a.resize(n, 0); b.resize(m, 0); for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < m; i++) cin >> b[i]; sort(a.begin(), a.end()); sort(b.begin(), b.end()); if (n == m - 2) { return -1; } if (n == m) { return -1; bool f = true; for(int i = 0; i < n; i++) if (a[i] != b[i]) f = false; if (f) { cout << "YES"; } else { cout << "NO"; } return 0; } if (n == m - 1) { return -1; int u = -1; int kk = 0; for(int i = 0; i < n; i++) for(int j = 0; j < int(b.size()); j++) { if (a[i] == a[j]) { b.erase(b.begin() + j); break; } kk++; u = i; } if (kk == 0 || (kk == 1 && b[0] + b[1] == a[u])) { cout << "YES"; } else { cout << "NO"; } return 0; } if (n == m - 2) { return -1; vector <int> u; for(int i = 0; i < n; i++) for(int j = 0; j < int(b.size()); j++) { if (a[i] == a[j]) { b.erase(b.begin() + j); break; } u.pb(i); } if (int(u.size()) == 0) { cout << "YES"; return 0; } if (int(u.size()) == 1) { for(int i = 0; i < (1 << int(b.size())); i++) { int sum = 0; for(int j = 0; j < int(b.size()); j++) { if ((i & (1 << j)) > 0) sum += b[j]; } if (sum == a[u[0]]) { cout << "YES"; return 0; } } cout << "NO"; return 0; } if (int(u.size()) == 2) { vector <int> kek(int(b.size()) + 1); for(int i = 0; i < int(kek.size()); i++) kek[i] = 0; while(kek.back() == 0) { int sum[2]; sum[0] = 0; sum[1] = 0; for(int j = 0; j < int(b.size()); j++) { if (kek[j] > 0) { sum[kek[j] - 1] += b[j]; } } if (sum[0] == a[u[0]] && sum[1] == a[u[1]]) { cout << "YES"; return 0; } kek[0]++; int j = 0; while(kek[j] == 3) { kek[j + 1]++; kek[j] = 0; j++; } } cout << "NO"; return 0; } return 0; } if (n == 1) { //O(2 ^ m * m) for(int i = 0; i < int(1 << m); i++) { int sum = 0; for(int j = 0; j < m; j++) { if ((i & (1 << j)) > 0) sum += b[j]; } if (a[0] == sum) { cout << "YES"; return 0; } } } else { // O(m! * (n + m)) while(next_permutation(b.begin(), b.end())) { vector <int> c = a; int i = 0; int j = 0; bool f = true; while(i < n && j < m) { if (c[i] > 0) { c[i] -= b[j]; j++; } if (c[i] == 0) { i++; } if (c[i] < 0) { f = false; break; } } if (f && i == n) { cout << "YES"; return 0; } } } cout << "NO"; return 0; }

Compilation message (stderr)

bank.cpp:20:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main()
      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...