Submission #341313

#TimeUsernameProblemLanguageResultExecution timeMemory
341313_aniGift (IZhO18_nicegift)C++17
7 / 100
851 ms30772 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
using ll = long long;
const int N = 1'000'002;
pair<ll,int> a[N];
priority_queue<pair<ll, int>> q;
vector<pair<ll, vector<int>>>ans;
int main()
{
	ll n, k;
	ll prv, x = 0;
	bool ok = true;
	cin >> n >> k;
	for (int i = 0; i < n; i++)
	{
		prv = x;
		cin >> x;
		if (i != 0 && x != prv)
			ok = false;
		q.push({ x, i });
	}
	if (ok) {
		if (n % k == 0)
		{
			cout << n / k << '\n';
			for (int i = 0; i < n; i+=k)
			{
				cout << x << ' ';
				for (int j = i; j < i + k; j++)
					cout << j + 1 << ' ';
				cout << '\n';
			}
		}
		else if (x % k == 0)
		{
			cout << n << '\n';
			for (int i = 0; i < n; i++)
			{
				cout << x / k << ' ';
				int j = i;
				int c = 0;
				while (c < k)
				{
					cout << j + 1 << ' ';
					j++;
					if (j >= n)
						j %= n;
					c++;
				}
				cout << '\n';
			}
		}
		else cout << -1;
	}
	else {
		while (!q.empty()) {
			vector<int> cur;
			if (q.size() < k)
			{
				cout << -1;
				return 0;
			}
			for (int i = 0; i < k; i++)
			{
				a[i] = q.top();
				cur.push_back(a[i].second);
				q.pop();
			}
			for (int i = 0; i < k - 1; i++)
			{
				a[i].first -= a[k - 1].first;
				if (a[i].first)q.push(a[i]);
			}
			ans.push_back({ a[k - 1].first,cur });
		}
		cout << ans.size() << '\n';
		for (auto b : ans)
		{
			cout << b.first << ' ';
			sort(b.second.begin(), b.second.end());
			for (auto x : b.second)
				cout << x + 1 << ' ';
			cout << '\n';
		}
	}
	return 0;
}

Compilation message (stderr)

nicegift.cpp: In function 'int main()':
nicegift.cpp:61:17: warning: comparison of integer expressions of different signedness: 'std::priority_queue<std::pair<long long int, int> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   61 |    if (q.size() < k)
      |        ~~~~~~~~~^~~
#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...