#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 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... |