Submission #1170261

#TimeUsernameProblemLanguageResultExecution timeMemory
1170261mnbvcxz123Gift (IZhO18_nicegift)C++20
7 / 100
326 ms69884 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;

struct Op{
    ll x;
    vector<int>pos;
};

int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, k;
cin >> n >> k;
vector<ll> A(n);
ll sum = 0;
for (int i = 0; i < n; i++) {
    cin >> A[i];
    sum += A[i];
}

if (sum % k != 0) {
    cout << -1;
    return 0;
}

ll mreq = sum / k;
for (int i = 0; i < n; i++) {
    if (A[i] > mreq) {
        cout << -1;
        return 0;
    }
}

priority_queue<pair<ll, int>> pq;
for (int i = 0; i < n; i++) {
    if (A[i] > 0)
        pq.push({A[i], i});
}

vector<Op> ops;
while (pq.size() >= (size_t)k) {
    vector<pair<ll, int>> group;
    for (int i = 0; i < k; i++) {
        group.push_back(pq.top());
        pq.pop();
    }
    ll mn = group[0].first;
    for (int i = 1; i < k; i++) {
        mn = min(mn, group[i].first);
    }
    Op op;
    op.x = mn;
    for (int i = 0; i < k; i++) {
        op.pos.push_back(group[i].second + 1);
        group[i].first -= mn;
    }
    ops.push_back(move(op));
    for (int i = 0; i < k; i++) {
        if (group[i].first > 0)
            pq.push(group[i]);
    }
}

if (!pq.empty()) {
    cout << -1;
    return 0;
}

cout << ops.size() << "\n";
for (auto &op : ops) {
    cout << op.x;
    for (auto &p : op.pos)
        cout << " " << p;
    cout << "\n";
}

return 0;
}
#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...