Submission #804600

#TimeUsernameProblemLanguageResultExecution timeMemory
804600mousebeaverCookies (JOI23_cookies)C++14
19 / 100
1071 ms5744 KiB
#define ll long long #define INF numeric_limits<ll>::max()/2 #define pll pair<ll, ll> #include <bits/stdc++.h> using namespace std; void dfs(vector<vector<ll>>& output, ll cookies, vector<ll>& current, vector<ll>& a, vector<ll>& b) { if(cookies > 0) { ll start = 0; if(current.size()) start = current.back(); for(ll j = start; j < (int) b.size() && b[j] <= cookies; j++) { current.push_back(j); dfs(output, cookies-b[j], current, a, b); current.pop_back(); } } else { //Test the given state!!! if(output.size() && current.size() > output.size()) //No improvement possible { return; } vector<vector<ll>> res(current.size(), vector<ll> (0)); //pre-output priority_queue<pll, vector<pll>, less<pll>> q; //Free, index for(ll i = 0; i < (int) current.size(); i++) { q.push({b[current[i]], i}); } for(ll i = 0; i < (int) a.size(); i++) { if(a[i] > (int) current.size()) { return; } vector<pll> used(0); //Free, index for(ll j = 0; j < a[i]; j++) { ll c, index; tie(c, index) = q.top(); if(c == 0) { return; } q.pop(); used.push_back({c-1, index}); res[index].push_back(i+1); } for(pll p : used) { q.push(p); } } output = res; } } int main() { ios::sync_with_stdio(false); cin.tie(0); /*//Testing something!!! vector<ll> dp(16, 1); for(ll i = 2; i <= 15; i++) { for(ll j = 0; j+i <= 15; j++) { dp[j+i] += dp[j]; } } cout<<"TEST: "<<dp[15]<<endl; return 0;*/ bool sub1 = true; ll n; cin>>n; vector<ll> a(n); for(ll i = 0; i < n; i++) { cin>>a[i]; if(a[i] != 1 || n > 500) { sub1 = false; } } ll m; cin>>m; vector<ll> b(m); for(ll i = 0; i < m; i++) { cin>>b[i]; } if(false) //sub1 { //Subtask 1: vector<pll> dp(n+1, {INF, -1}); //Number, last dp[0] = {0, 0}; for(ll i = 0; i < n; i++) { for(ll j = 0; j < m && i+b[j] <= n; j++) { if(dp[i].first+1 < dp[i+b[j]].first) { dp[i+b[j]].first = dp[i].first+1; dp[i+b[j]].second = j; } } } if(dp[n].first == INF) { cout<<-1<<"\n"; } else { cout<<dp[n].first<<"\n"; ll k = n; ll counter = 1; while(k > 0) { ll box = b[dp[k].second]; k -= box; cout<<box<<" "; while(box > 0) { cout<<counter<<" "; counter++; box--; } cout<<"\n"; } } return 0; } if(false) //m == 1 { //Subtask 2: ll sum = 0; for(ll i : a) { sum += i; } if(sum%b[0] != 0 || *max_element(a.begin(), a.end()) > sum/b[0]) { cout<<-1<<"\n"; } else { vector<vector<ll>> output(sum/b[0], vector<ll> (0)); priority_queue<pll, vector<pll>, greater<pll>> q; //Contained, index for(ll i = 0; i < sum/b[0]; i++) { q.push({0, i}); } for(ll i = 0; i < n; i++) { vector<pll> used(0); //Contained, index for(ll j = 0; j < a[i]; j++) { ll c, index; tie(c, index) = q.top(); q.pop(); used.push_back({c+1, index}); output[index].push_back(i+1); } for(pll p : used) { q.push(p); } } cout<<sum/b[0]<<"\n"; for(ll i = 0; i < sum/b[0]; i++) { cout<<b[0]<<" "; for(ll j : output[i]) { cout<<j<<" "; } cout<<"\n"; } } return 0; } //Subtask 3: vector<ll> current(0); vector<vector<ll>> output(0); ll sum = 0; for(ll i : a) { sum += i; } dfs(output, sum, current, a, b); if(output.empty()) { cout<<-1<<"\n"; } else { cout<<output.size()<<"\n"; for(ll i = 0; i < (int) output.size(); i++) { cout<<output[i].size()<<" "; for(ll j : output[i]) { cout<<j<<" "; } cout<<"\n"; } } return 0; }

Compilation message (stderr)

cookies.cpp: In function 'int main()':
cookies.cpp:83:10: warning: variable 'sub1' set but not used [-Wunused-but-set-variable]
   83 |     bool sub1 = true;
      |          ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...