#include <bits/stdc++.h>
using namespace std;
#define int long long
#define F first
#define S second
#define all(x) x.begin() , x.end()
#define pb push_back
#define kid int tm = (tl + tr) >> 1 , cl = v << 1 , cr = cl | 1
const int N = 15e3 + 10;
const int INF = 1e18 + 10;
const int mod = 1e9 + 7;
int n , m;
int a[N];
int b[N];
int dp[N];
int par[N];
vector<int> ans[N];
void solve() {
int s = 0;
int mx = 0;
cin >> n;
for(int i = 1 ; i <= n ; i++)
cin >> a[i] , s += a[i] , mx = max(mx , a[i]);
cin >> m;
for(int i = 1 ; i <= m ; i++)
cin >> b[i];
for(int i = 1 ; i < N ; i++) dp[i] = -INF;
for(int i = 1 ; i <= m ; i++)
for(int j = b[i] ; j < N ; j++)
if(dp[j] < dp[j-b[i]] + 1) dp[j] = dp[j - b[i]] + 1 , par[j] = b[i];
if(dp[s] < mx) {cout << "-1\n"; return;}
multiset<pair<int , int>> t;
int x = s;
int o = 1;
while(x) {
t.insert({par[x] , o++});
x -= par[x];
}
sort(a+1 , a+n+1); reverse(a+1 , a+n+1);
for(int i = 1 ; i <= n ; i++) {
if(t.size() < a[i]) {cout << "-1\n"; return;}
auto p = --t.end();
vector<pair<int , int>> v;
for(int j = 1 ; j <= a[i] ; j++) {
v.pb(*p);
ans[p->S].pb(i);
t.erase(p);
p = --t.end();
}
for(auto x : v) t.insert({x.F-1 , x.S});
}
cout << dp[s] << "\n";
for(int i = 1 ; i <= dp[s] ; i++) {
cout << ans[i].size() << " ";
for(auto x : ans[i]) cout << x << " ";
cout << "\n";
}
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n = 1;
// cin >> n;
while(n--) solve();
}
# | 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... |