이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pr;
#define FOR(i,a) for (int i=0;i<(a);++i)
#define FORR(i,a) for (int i=(a)-1;i>=0;i--)
#define FORT(i,a,b) for (int i=(a);i<=(b);++i)
#define FORTR(i,a,b) for (int i=(b);i>=(a);--i)
#define trav(i,v) for (auto i : v)
#define fr first
#define sc second
const int N=1e6+6;
ll a[N],indcomp[N];
vector<pair<ll,int> > comp[N];
vector<int> ans[N];
int main(){
ios_base::sync_with_stdio(false);
ll n,k;
cin>>n>>k;
ll sum=0;
ll mx=0;
FOR(i,n){
cin>>a[i];
sum+=a[i];
mx=max(mx,a[i]);
}
if (sum%k!=0 || sum/k<mx){
cout<<-1<<endl;
return 0;
}
ll tv=0,sahm=sum/k,cnt=0;
FOR(i,n){
if (!a[i])continue;
if (tv+a[i]>=sahm){
comp[cnt].push_back({sahm-tv,i+1});
a[i]-=sahm-tv;
cnt++;
tv=0;
i--;
continue;
}
comp[cnt].push_back({a[i],i+1});
tv+=a[i];
}
int hert=0;
while(sum){
//cout<<sum<<endl;
ll mn=INT_MAX;
FOR(i,k){
mn=min(mn,comp[i][indcomp[i]].fr);
}
ans[hert].push_back(mn);
FOR(i,k){
comp[i][indcomp[i]].fr-=mn;
ans[hert].push_back(comp[i][indcomp[i]].sc);
if (comp[i][indcomp[i]].fr==0)
indcomp[i]++;
}
hert++;
sum-=(k*mn);
}
cout<<hert<<endl;
FOR(i,hert){
//cout<<ans[i].size()<<" ";
trav(tt,ans[i])cout<<tt<<" ";
cout<<endl;
}
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... |