제출 #114885

#제출 시각아이디문제언어결과실행 시간메모리
114885mrboorger은행 (IZhO14_bank)C++14
44 / 100
1073 ms384 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) { 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) { 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) // { // vector <int> u // 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 == 1 && b[0] + b[1] == a[u]) // { // cout << "YES"; // } // else // { // cout << "NO"; // } // 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; }

컴파일 시 표준 에러 (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...