#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin >> n;
int arr[n];
bool st1=true;
for(int i=0; i<n; i++){
cin >> arr[i];
if(arr[i]!=1) st1=false;
}
cin >> m;
vector<int> brr(m);
for(int i=0; i<m; i++) cin >> brr[i];
if(st1){
bitset<505> bs[n+1];
bs[0][0]=1;
int num=-1;
for(int i=1; i<=n; i++){
for(int j=0; j<m; j++) bs[i]|=bs[i-1]<<brr[j];
if(bs[i][n]){
num=i;
break;
}
}
if(num==-1){
cout << -1;
return 0;
}
else{
vector<int> ans;
int cur=n;
for(int i=num; i>0; i--){
for(int j=0; j<m; j++){
if(bs[i-1][cur-brr[j]]){
ans.push_back(brr[j]);
cur-=brr[j];
break;
}
}
}
cout << ans.size() << '\n';
cur=1;
for(int i:ans){
cout << i << ' ';
for(int j=0; j<i; j++){
cout << cur << ' ';
cur++;
}
cout << '\n';
}
}
}
else if(m==1){
int tot=0;
for(int i=0; i<n; i++) tot+=arr[i];
if(tot%brr[0]){
cout << -1;
return 0;
}
set<pair<int,int> > got;
for(int i=0; i<n; i++) got.insert({arr[i],i+1});
vector<vector<int> > ans;
for(int i=0; i<tot/brr[0]; i++){
if((int)got.size()<brr[0]){
cout << -1;
return 0;
}
ans.push_back({});
vector<pair<int,int> > nxt;
for(int j=0; j<brr[0]; j++){
pair<int,int> yay=*(--got.end());
ans.back().push_back(yay.second);
yay.first--;
if(yay.first) nxt.push_back(yay);
got.erase(--got.end());
}
for(auto i:nxt) got.insert(i);
}
cout << tot/brr[0] << '\n';
for(auto i:ans){
for(int j:i) cout << j << ' ';
cout << '\n';
}
}
}
# | 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... |