Submission #644135

#TimeUsernameProblemLanguageResultExecution timeMemory
644135Do_you_copyGift (IZhO18_nicegift)C++17
7 / 100
858 ms87120 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
using ll = long long;
using pii = pair <int, int>;
#define pb push_back
const int maxN = 1e6 + 10;
const int maxOP = 3e6;
int n, k;
int a[maxN];
priority_queue <pii> PQ;

vector <vector <int>> e;
void Init(){
    cin >> n >> k;
    for (int i = 1; i <= n; ++i){
        cin >> a[i];
        PQ.push({a[i], i});
    }
    for (int i = 1; i * k <= maxOP; ++i){
        vector <int> pos;
        for (int j = 0; j < k; ++j){
            pos.pb(PQ.top().se);
            PQ.pop();
        }
        if (!a[pos.back()]) break;
        e.pb({a[pos.back()]});
        for (int j = 0; j < k; ++j){
            e.back().pb(pos[j]);
            a[pos[j]] -= a[pos.back()];
        }
        for (int j = 0; j < k; ++j){
            PQ.push({a[pos[j]], pos[j]});
        }
    }
    for (int i = 1; i <= n; ++i){
        if (a[i]){
            cout << -1; return;
        }
    }
    cout << e.size() << "\n";
    for (auto &i: e){
        for (auto &j: i) cout << j << " ";
        cout << "\n";
    }
}

signed main() {
    Init();
}
#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...