Submission #1147377

#TimeUsernameProblemLanguageResultExecution timeMemory
1147377ooscodeCookies (JOI23_cookies)C++20
0 / 100
1 ms836 KiB
#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 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...