제출 #385452

#제출 시각아이디문제언어결과실행 시간메모리
385452vanicGift (IZhO18_nicegift)C++14
7 / 100
818 ms99008 KiB
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <set>
#include <stack>
#include <map>
#include <queue>
#include <vector>
#include <cstring>
#include <array>
#include <bitset>

using namespace std;
typedef long long ll;

const int maxn=1e6+5;

ll a[maxn];
set < ll > s;
set < pair < ll, int > > s1;
vector < vector < ll > > q;

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n, k;
	cin >> n >> k;
	ll sum=0;
	s.insert(0);
	for(int i=0; i<n; i++){
		cin >> a[i];
		sum+=a[i];
		s.insert(a[i]);
		s1.insert({a[i], i});
	}
	if(sum%k){
		cout << -1 << '\n';
		return 0;
	}
	ll val;
	set < pair < ll, int > >::iterator it;
	vector < ll > v;
	vector < pair < ll, int > > ins;
	set < ll >::iterator it1;
	while(!s1.empty()){
		if((int)s1.size()==k){
			it=s1.begin();
			val=it->first;
			v.push_back(val);
			for(int i=0; i<k; i++){
				v.push_back(it->second+1);
				if(val!=it->first){
					cout << -1 << '\n';
					return 0;
				}
				it++;
			}
			s1.clear();
		}
		else{
			it=--s1.end();
			for(int i=0; i<k; i++){
				it--;
			}
			val=it->first;
			it1=s.lower_bound(val);
			it1--;
			val=*it1;
			it++;
			val=it->first-val;
			v.push_back(val);
			it=--s1.end();
			for(int i=0; i<k; i++){
				v.push_back(it->second+1);
				it--;
			}
			it=--s1.end();
			for(int i=0; i<k; i++){
				ins.push_back({it->first-val, it->second});
				it=s1.erase(it);
				it--;
			}
			for(int i=0; i<k;  i++){
				if(ins[i].first){
					s1.insert(ins[i]);
				}
			}
			ins.clear();
			
		}
		q.push_back(v);
		v.clear();
	}
	cout << q.size() << '\n';
	for(int i=0; i<(int)q.size(); i++){
		for(int j=0; j<(int)q[i].size(); j++){
			cout << q[i][j] << ' ';
		}
		cout << '\n';
	}
	return 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...