Submission #1258828

#TimeUsernameProblemLanguageResultExecution timeMemory
1258828Seyyed_Mojtaba_MortazaviJOIRIS (JOI16_joiris)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>

using namespace std;

#define int short int
typedef pair <int, int> pii;

const int MAXN = 5e1 + 10;

int a[MAXN];
int s[MAXN];
vector <pii> ans;

void query(int type, int ind, int k)
{
	if (type == 1)
	{
		a[ind] += k;
	}
	else
	{
		for (int i = ind; i < ind + k; i++)
			a[ind]++;
	}
	ans.push_back({type, ind});
}

signed main()
{
	int n, k;
	cin >> n >> k;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		s[(i - 1) % k] = (s[(i - 1) % k] + a[i]) % k;
	}
	for (int i = 0; i < n % k; i++)
	{
		if (s[i] != s[0])
		{
			cout << -1 << endl;
			return 0;
		}
	}
	for (int i = n % k; i < k; i++)
	{
		if (s[i] != s[n % k])
		{
			cout << -1 << endl;
			return 0;
		}
	}
	for (int i = 2; i <= n; i++)
	{
		while (a[i] < a[i - 1])
			query(1, i, k);
	}
	for (int i = k + 1; i <= n; i++)
	{
		while (a[i - 1] < a[i])
		{
			for (int j = (i - 1) & k + 1; j < i; j += k)
				query(2, j, k);
		}
	}
	for (int i = 1; i < k; i++)
	{
		while (a[i] < a[n])
			query(1, i, k);
	}
	int mx = 0;
	for (int i = n % k + 1; i <= k; i++)
		mx = max(mx, a[i]);
	for (int i = 1; i <= n; i++)
	{
		while (a[i] < mx)
			query(1, i, k);
	}
	mx = 0;
	for (int i = 1; i <= n % k; i++)
		mx = max(mx, a[i]);
	for (int i = 1; i <= n % k; i++)
	{
		while (a[i] < mx)
			query(1, i, k);
	}
	for (int i = n % k + 1; i <= n; i += k)
	{
		while (a[i] < mx)
			query(2, i, k);
	}
	cout << ans.size() << '\n';
	for (auto [x, y] : ans)
		cout << x << " " << y << '\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...