Submission #655806

#TimeUsernameProblemLanguageResultExecution timeMemory
655806asiatBank (IZhO14_bank)C++14
44 / 100
39 ms296 KiB
#include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std; main(){ cin.tie(0)->sync_with_stdio(0); int n; cin >> n; int m; cin >> m; vector <int> v(n), g(m); for (int i = 0; i < n; i++)cin >> v[i]; for (int i = 0; i < m; i++)cin >> g[i]; if(n > m){ cout << "NO" << endl; return 0; } if(n == m){ sort(v.begin(), v.end()); sort(g.begin(), g.end()); if(v == g){ cout << "YES" << endl; }else cout << "NO" << endl; return 0; } if(n == 1){ vector <int> dp(v[0]+1); dp[0] = 1; for (int i = 0; i < m; i++){ for (int j = v[0]; j >= 1; j--){ if(j-g[i] >= 0 and dp[j-g[i]])dp[j] = 1; } } if(dp[v[0]]){ cout << "YES" << endl; }else cout << "NO" << endl; return 0; } if(m <= 10){ sort(v.begin(), v.end()); sort(g.begin(), g.end()); do{ int cnt = 0; int ok = 0; for (int i = 0; i < n; i++){ int sum = 0; while(sum < v[i] and cnt < m){ sum+=g[cnt]; cnt++; } if((cnt == m and i != n-1) or sum != v[i]){ ok = 1; break; } } if(!ok){ cout << "YES" << endl; return 0; } }while(next_permutation(g.begin(), g.end())); cout << "NO" << endl; return 0; } if(m <= 14 and n*2 <= m){ cout << "NO" << endl; return 0; } if(m <= 14){ int use = 0; vector <vector <int>> cur(100); int cnt = 0; for (int i = 0; i < n; i++)use+=v[i]; for (int i = 0; i < (1<<m); i++){ vector <int> ans; int x = i; while(x > 0){ ans.push_back(x&1); x>>=1; } reverse(ans.begin(), ans.end()); while(ans.size() < m)ans.push_back(0); int sum = 0; for (int j = 0; j < m; j++){ if(ans[j] == 1)sum+=g[j]; } if(sum == use)cur[cnt] = ans, cnt++; } if(cnt > 10)assert(false); for (int i = 0; i < cnt; i++){ vector <int> res; for (int j = 0; j < (int)cur[i].size(); j++){ if(cur[i][j] == 1)res.push_back(g[j]); } sort(res.begin(), res.end()); do{ int idx = 0; int ok = 0; for (int j = 0; j < n; j++){ int sum1 = 0; while(sum1 < v[j]){ sum1+=g[idx]; idx++; } if((idx == cnt and i != n-1) or sum1 != v[i]){ ok = 1; break; } } if(!ok){ cout << "YES" << endl; return 0; } }while(next_permutation(res.begin(), res.end())); cout << "NO" << endl; return 0; } } return 0; }

Compilation message (stderr)

bank.cpp:5:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
    5 | main(){
      | ^~~~
bank.cpp: In function 'int main()':
bank.cpp:79:21: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   79 |    while(ans.size() < m)ans.push_back(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...