Submission #1214220

#TimeUsernameProblemLanguageResultExecution timeMemory
1214220PenguinsAreCuteCookies (JOI23_cookies)C++17
63 / 100
595 ms1114112 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n, tot = 0; cin >> n; int a[n]; priority_queue<pair<int,int>> pq; for(int i=0;i<n;i++) { cin >> a[i]; tot += a[i]; pq.push({a[i],i}); } sort(a,a+n); 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 > 0); 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 ok[n]; memset(ok,0,sizeof(ok)); for(int i=0;i<m;i++) ok[n-b[i]] = 1; bitset<3001> dp[n+1][tot+1]; dp[0][0][0] = 1; for(int i=1;i<=n;i++) { for(int j=0;j<a[i-1];j++) dp[i][j] = dp[i-1][j] << (a[i-1] - j); for(int j=a[i-1];j<=tot;j++) dp[i][j] = dp[i-1][j] >> (j - a[i-1]); if(ok[i-1]) for(int j=1;j<=tot;j++) dp[i][j] |= (dp[i][j-1] >> 1); } for(int j=0;j<=tot;j++) if(dp[n][j][0]) { int i0 = n, j0 = j, k0 = 0; while(i0) { if(j0 && k0 < tot && ok[i0-1] && dp[i0][j0-1][k0+1]) { j0 -= 1, k0 += 1; add(n-(i0-1)); } else k0 -= (a[--i0] - j0); } 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...