Submission #1214190

#TimeUsernameProblemLanguageResultExecution timeMemory
1214190PenguinsAreCuteCookies (JOI23_cookies)C++17
13 / 100
393 ms441600 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n, tot = 0; cin >> n; priority_queue<pair<int,int>> pq; for(int i=0,a;i<n;i++) { cin >> a; tot += a; pq.push({a,i}); } vector<vector<int>> sol; auto add = [&pq,&sol](int s) { sol.push_back(vector<int>(s,0)); vector<pair<int,int>> used; for(int i=0;i<s;i++) { auto [cnt, idx] = pq.top(); assert(cnt); pq.pop(); used.push_back({cnt-1,idx}); sol.back()[i] = idx; } for(auto i: used) pq.push(i); }; int m; cin >> m; int b[m]; for(int i=0;i<m;i++) cin >> b[i]; bool dp[m+1][tot+1][tot+1]; memset(dp,0,sizeof(dp)); dp[0][0][0] = 1; for(int i=1;i<=m;i++) { memcpy(dp[i],dp[i-1],sizeof(dp[i])); for(int j=0;j<tot;j++) for(int k=0;k<=tot-b[i-1];k++) if(dp[i][j][k]) dp[i][j+1][k+b[i-1]] = 1; } for(int j=pq.top().first;j<=tot;j++) if(dp[m][j][tot]) { int i1 = m, j1 = j, k1 = tot; while(i1) { if(j1 && k1 >= b[i1-1] && dp[i1][j1-1][k1-b[i1-1]]) { j1--; k1 -= b[i1-1]; add(b[i1-1]); } else i1--; } break; } if(!sol.size()) { cout << -1; return 0; } cout << sol.size() << "\n"; for(auto i: sol) { cout << i.size() << " "; for(auto j: i) cout << j+1 << " "; cout << "\n"; } }
#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...