Submission #859067

#TimeUsernameProblemLanguageResultExecution timeMemory
859067NaimSSGift (IZhO18_nicegift)C++14
100 / 100
1514 ms112500 KiB
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<(b);++i)
#define pb push_back
#define ff first 
#define ss second
using namespace std;
typedef long long ll;

const int N = 1e6 + 100;
ll a[N];
int32_t main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
	int n,k;
	cin >> n >> k;
	ll sum=0;
	rep(i,0,n){
		cin >> a[i];
		sum += a[i];
	}
	if(sum%k != 0){
		cout << -1 << endl;
		return 0;
	}
	vector<pair<ll,vector<int>> > res;

	ll divi = sum/k;
	rep(i,0,n)if(a[i] > divi){
		cout << -1 << endl;
		return 0;
	}
	vector<vector<pair<ll,ll>>> nv;
	int pt=0;

	while(pt < n){
		ll need = divi;
		vector<pair<ll,ll>> here;
		while(need > 0){
			while(pt < n && a[pt]==0)pt++;
			assert(pt < n);
			ll put = min(a[pt], need);
			if(a[pt] > divi){
				cout << -1 << endl;
				return 0;
			}
			a[pt] -= put;
			need -= put;
			assert(put > 0 && need>=0 && a[pt] >= 0);
			here.pb({put , pt});
		}
		while(pt < n && a[pt]==0)pt++;
		nv.pb(here);
	}
	ll put = 0;
	while(divi > 0){
		ll mn = 1e18;
		for(auto &v : nv){
			mn = min(mn,v.back().ff);
		}
		divi -= mn;
		vector<int> here;
		for(auto &v : nv){
			here.pb(v.back().ss);
			v.back().ff -= mn;
			while(v.size() && v.back().ff == 0)v.pop_back();
		}
		assert(mn > 0);
		res.pb({mn, here});
	}
	cout << res.size() << endl;
	for(auto [X,v] : res){
		cout << X << " ";
		for(auto id : v)cout << id + 1<<" ";
		cout << endl;
	}
}

Compilation message (stderr)

nicegift.cpp: In function 'int32_t main()':
nicegift.cpp:70:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   70 |  for(auto [X,v] : res){
      |           ^
nicegift.cpp:53:5: warning: unused variable 'put' [-Wunused-variable]
   53 |  ll put = 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...