제출 #90684

#제출 시각아이디문제언어결과실행 시간메모리
90684popovicirobert은행 (IZhO14_bank)C++14
44 / 100
1077 ms720 KiB
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long #define ld long double // 217 // 44 using namespace std; int sum[20], a[20], b[20]; int nxt[20], prv[20]; int n, m, first; void bkt(int pos, int cnt) { if(pos == m) { if(cnt == n) { cout << "YES"; exit(0); } } else { bkt(pos + 1, cnt); int i = first; while(i < n) { if(sum[i] + b[pos] <= a[i]) { sum[i] += b[pos]; int aux = first; if(sum[i] == a[i]) { if(i == first) { first = nxt[i]; } else { nxt[prv[i]] = nxt[i]; prv[nxt[i]] = prv[i]; } } bkt(pos + 1, cnt + (sum[i] == a[i])); first = aux; if(i != first) { nxt[prv[i]] = i; prv[nxt[i]] = i; } sum[i] -= b[pos]; } i = nxt[i]; } } } int main() { //ifstream cin("A.in"); //ofstream cout("A.out"); int i; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n >> m; for(i = 0; i < n; i++) { cin >> a[i]; } for(i = 0; i < m; i++) { cin >> b[i]; } for(i = 0; i < n; i++) { prv[i] = i - 1; nxt[i] = i + 1; } first = 0; sort(b, b + m, greater<int>()); bkt(0, 0); cout << "NO"; //cin.close(); //cout.close(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...