#include <algorithm>
#include <bits/stdc++.h>
#include <cassert>
#include <functional>
#include <iomanip>
#include <queue>
using namespace std;
#define ll long long
#define ull unsigned long long
#define ld long double
#define ff first
#define ss second
#define ln "\n"
#define mp make_pair
const ll INF = 2e18;
const ll MOD = 1e9+7;
void solve(){
ll n, k; cin >> n >> k;
vector<ll> a(n); ll sum=0;
set<pair<ll, ll>> st;
ll mx=0;
for (ll i=0; i<n; i++){
cin >> a[i]; sum+=a[i];
mx=max(mx, a[i]);
st.insert({a[i], i});
}
if (sum%k or sum-mx<mx) {cout << -1 << ln; return;}
vector<pair<ll, vector<ll>>> op;
while (!st.empty()){
op.push_back({0, vector<ll>()});
// assert((ll)st.size()>=k);
for (ll j=0; j<k and !st.empty(); j++){
op.back().ss.push_back((*st.rbegin()).ss);
st.erase(*st.rbegin());
}
op.back().ff=a[op.back().ss.back()];
for (auto i:op.back().ss){
a[i]-=op.back().ff;
// assert(a[i]>=0);
if (a[i]>0){
st.insert({a[i], i});
}
}
}
for (auto &ch:op){
if ((ll)ch.ss.size()!=k){
cout << -1 << ln; return;
}
}
cout << op.size() << ln;
reverse(op.begin(), op.end());
for (auto &ch:op){
cout << ch.ff << " ";
for (auto ich:ch.ss) cout << ich+1 << " ";
cout << ln;
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
auto start = chrono::high_resolution_clock::now();
ll t=1;
// cin >> t;
while (t--) solve();
#ifdef LOCAL
auto duration = chrono::duration_cast<chrono::microseconds>(chrono::high_resolution_clock::now() - start);
cout << setprecision(0) << fixed << "time: " << (double)duration.count()/1000.0 << " milliseconds" << endl;
#endif
}
# | 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... |