Submission #1098536

#TimeUsernameProblemLanguageResultExecution timeMemory
1098536vjudge1Bank (IZhO14_bank)C++17
44 / 100
1085 ms472 KiB
//#include <bits/stdc++.h> #include <cassert> #include <cctype> #include <cerrno> #include <cfloat> #include <ciso646> #include <climits> #include <clocale> #include <cmath> #include <csetjmp> #include <csignal> #include <cstdarg> #include <cstddef> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <ccomplex> #include <cfenv> #include <cinttypes> #include <cstdbool> #include <cstdint> #include <ctgmath> #include <cwchar> #include <cwctype> #include <algorithm> #include <bitset> #include <complex> #include <deque> #include <exception> #include <fstream> #include <functional> #include <iomanip> #include <ios> #include <iosfwd> #include <iostream> #include <istream> #include <iterator> #include <limits> #include <list> #include <locale> #include <map> #include <memory> #include <new> #include <numeric> #include <ostream> #include <queue> #include <set> #include <sstream> #include <stack> #include <stdexcept> #include <streambuf> #include <string> #include <typeinfo> #include <utility> #include <valarray> #include <vector> #include <array> #include <atomic> #include <chrono> #include <condition_variable> #include <forward_list> #include <future> #include <initializer_list> #include <mutex> #include <random> #include <ratio> #include <regex> #include <scoped_allocator> #include <system_error> #include <thread> #include <tuple> #include <typeindex> #include <type_traits> #include <unordered_map> #include <unordered_set> using namespace std; using ll = long long; #define int long long const int N = 1e5 + 7; const int M = 1e9 + 7; struct custom_hash { //unordered_map<long long, int, custom_hash> safe_map; gp_hash_table<long long, int, custom_hash> safe_hash_table; static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31); } size_t operator()(uint64_t x) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x + FIXED_RANDOM); } }; int binpow(int a, int n, int m) { int res = 1; while (n) { if (n & 1) res = res * a % m; a = a * a % m; n >>= 1; } return res; } /*inline void factorials(int n) { f[0] = 1; for(int i = 1; i <= n; i++) { f[i] = (f[i - 1] * i) % M; } invf[n] = binpow(f[n], M - 2, M); for(int i = n - 1; i >= 0; i--) { invf[i] = (invf[i + 1] * (i + 1)) % M; } } inline int cnk(int n, int k) { if(k > n) { return 0; } return (((f[n] * invf[n - k]) % M) * invf[k]) % M; } */ int a[N], b[N], usd[N], ans = 0, yes = 0; vector<int> v; void rec(int nw, int sum, int nd) { if(sum == nd) { yes = 1; //cout << sum << ' ' << nw << ' ' << ":/n"; return; } for(int i = nw - 1; i >= 0; i--) { if(!usd[i] and sum + b[i] <= nd) { rec(i, sum + b[i], nd); if(yes == 1) { v.push_back(i); usd[i] = 1; return; } } } } inline void Solve() { int n, m; cin >> n >> m; if(n == 1) { for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int i = 1; i <= m; i++) { cin >> b[i]; } sort(a + 1, a + 1 + n); sort(b + 1, b + 1 + m); int r = m; while(b[r] > a[n]) r--; for(int i = n; i >= 1; i--) { for(int j = r; j >= 1; j--) { if(usd[j] == 0) { yes = 0; rec(j, b[j], a[i]); if(yes == 1) { ans++; //for(auto to : v) cout << to << ' '; //cout << '\n'; usd[j] = 1; break; } v.clear(); } } } //cout << ans << '\n'; if(ans == n) { cout << "YES\n"; } else { cout << "NO\n"; } } else { for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int i = 1; i <= m; i++) { int x; cin >> x; v.push_back(x); } sort(v.begin(), v.end()); do { int sum = 0, nw = 1; ans = 0; for(int i = 1; i <= m; i++) { sum += v[i - 1]; if(sum == a[nw]) { ans++; nw++; sum = 0; if(ans == n) { cout << "YES\n"; return; } } } if(ans == n) { cout << "YES\n"; return; } } while(next_permutation(v.begin(), v.end())); cout << "NO\n"; } } signed main() { //freopen("brackets.in", "r", stdin); //freopen("brackets.out", "w", stdout); ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; //cin >> t; //cout << '\n' << '\n'; while(t--) { Solve(); } return 0; } /* Special cases n = 1 or just 1? u r using unsigned long long which can't carry negative values? what if u r doing the same thing n times, it may cause the TL make sure that the size of your massives, vectors are enough */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...