#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
ll n, k;
cin>>n>>k;
vector<ll> a(n);
ll sum=0, mx=0;
for(ll i=0; i<n; i++){
cin>>a[i];
sum+=a[i];
mx=max(mx, a[i]);
}
if(mx>sum/k || sum%k!=0){
cout<<0;
return 0;
}
vector<pair<ll, ll>> v;
ll cur=0;
v.push_back({a[0], 1});
for(ll i=0; i<n; i++){
if(cur+a[i]<=sum/k){
cur+=a[i];
}else{
cur=a[i]-sum/k+cur;
v.push_back({cur, i+1});
}
if(cur==sum/k){
cur=0;
if(i+1<n){
v.push_back({a[i+1], i+2});
}
}
}
ll mn, y=0;
vector<vector<ll>> ans(n);
while(sum>0){
mn=LLONG_MAX;
for(auto& it:v){
mn=min(it.first, mn);
ans[y].push_back(it.second);
}
ans[y].push_back(min(mn, sum/k));
for(ll i=0; i<k; i++){
v[i].first-=mn;
if(v[i].first==0){
v[i]={a[v[i].second], v[i].second+1};
}
}
y++;
sum-=mn*k;
}
cout<<y<<'\n';
for(ll i=0; i<n; i++){
for(ll j=ans[i].size()-1; j>=0; j--){
cout<<ans[i][j]<<" ";
}
cout<<'\n';
}
}
| # | 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... |