#include <bits/stdc++.h>
using namespace std;
int N;
int M;
int lst[15100];
int B[15100];
int from[15100];
vector<int> memo[15100];
priority_queue<pair<int,int>> pq;
map<vector<int>,pair<int,vector<int> >> mep[16];
int main(){
scanf(" %d",&N);
int big = 0;
int b = 0;
for(int i = 1; i <= N; i++){
scanf(" %d",&lst[i]);
big = max(lst[i],big);
b += lst[i];
}
scanf(" %d",&M);
for(int i = 1; i <= M; i++){
scanf(" %d",&B[i]);
}
vector<int> temp;
for(int i = 1; i <= N; i++) temp.push_back(lst[i]);
sort(temp.begin(),temp.end(),greater<int>());
B[M + 1] = b + 1;
mep[b][temp] = {0,{}};
for(int i = b; i > 0; i--){
for(pair<vector<int>,pair<int,vector<int> >> ii : mep[i]){
for(int j = 0; B[j] <= (int)ii.first.size(); j++){
vector<int> temp = ii.first;
//printf("%d\n",i);
//for(int i : temp) printf("%d ",i);
//printf("\n");
for(int k = 0; k < B[j]; k++) temp[k]--;
sort(temp.begin(),temp.end(),greater<int>());
while(temp.size() != 0 && temp.back() == 0) temp.pop_back();
if(mep[i - B[j]].find(temp) != mep[i - B[j]].end()){
mep[i - B[j]][temp] = min(mep[i - B[j]][temp], {ii.second.first + 1, ii.first});
}
else mep[i - B[j]][temp] = {ii.second.first + 1, ii.first};
}
}
}
int num = mep[0][{}].first;
if(num == 0){
printf("-1\n");
}
else{
vector<int> temp = {};
int cont = 0;
vector<int> bos = {};
for(int i = 0; i < num; i++){
int sum = 0;
temp = mep[cont][temp].second;
for(int i : temp) sum += i;
bos.push_back(sum - cont);
cont = sum;
}
while(!pq.empty()) pq.pop();
for(int i = 1; i <= N; i++) pq.push({lst[i],i});
for(int i : bos){
printf("%d ",i);
vector<pair<int,int>> v;
for(int j = 0; j < i; j++){
v.push_back(pq.top());
pq.pop();
}
for(pair<int,int> ii : v){
if(ii.first != 1){
pq.push({ii.first - 1, ii.second});
}
printf("%d ",ii.second);
}
printf("\n");
}
}
}
Compilation message (stderr)
cookies.cpp: In function 'int main()':
cookies.cpp:15:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
15 | scanf(" %d",&N);
| ~~~~~^~~~~~~~~~
cookies.cpp:21:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
21 | scanf(" %d",&lst[i]);
| ~~~~~^~~~~~~~~~~~~~~
cookies.cpp:26:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
26 | scanf(" %d",&M);
| ~~~~~^~~~~~~~~~
cookies.cpp:29:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
29 | scanf(" %d",&B[i]);
| ~~~~~^~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |