제출 #123232

#제출 시각아이디문제언어결과실행 시간메모리
123232egorlifarJOIRIS (JOI16_joiris)C++17
100 / 100
3 ms504 KiB
/*
ЗАПУСКАЕМ 
░ГУСЯ░▄▀▀▀▄░РАБОТЯГУ░░
▄███▀░◐░░░▌░░░░░░░
░░░░▌░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░▄▀▒▒▀▀▀▀▄
░░░▐░░░░▐▒▒▒▒▒▒▒▒▀▀▄
░░░▐░░░░▐▄▒▒▒▒▒▒▒▒▒▒▀▄
░░░░▀▄░░░░▀▄▒▒▒▒▒▒▒▒▒▒▀▄
░░░░░░▀▄▄▄▄▄█▄▄▄▄▄▄▄▄▄▄▄▀▄
░░░░░░░░░░░▌▌░▌▌░░░░░
░░░░░░░░░░░▌▌░▌▌░░░░░
░░░░░░░░░▄▄▌▌▄▌▌░░░░░ 
 */
#include <iostream>
#include <complex>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdio>
#include <numeric>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <cmath>
#include <bitset>
#include <cassert>
#include <queue>
#include <stack>
#include <deque>
    
     
using namespace std;
template<typename T1, typename T2>inline void chkmin(T1 &x, T2 y) { if (x > y) x = y; }
template<typename T1, typename T2>inline void chkmax(T1 &x, T2 y) { if (x < y) x = y; } 
#define sz(c) (int)(c).size()
#define all(c) (c).begin(), (c).end()
#define rall(c) (c).rbegin(), (c).rend()
#define left left228
#define right right228
#define next next228
#define rank rank228
#define prev prev228
#define y1 y1228                                                         
#define read(FILENAME) freopen((FILENAME + ".in").c_str(), "r", stdin)
#define write(FILENAME) freopen((FILENAME + ".out").c_str(), "w", stdout)
#define files(FILENAME) read(FILENAME), write(FILENAME)
#define pb push_back
const string FILENAME = "input";
const int MAXN = 53;
const int MOVE_LIMIT = 10000;


int a[MAXN];
int uk;
int t[10001], x[10001];

 
void add(int _t, int _x) {
	t[uk] = _t;
	x[uk++] = _x;
}


void solve(int n, int k, int i) {
	int level = 0;
	for (int j = 0; j < k; j++) {
		chkmax(level, a[i + j]);
	}
	add(2, i);
	for (int j = 1; j <= n; j++) {
		if (j < i || j >= i + k) {
			while (a[j] <= level) {
				a[j] += k;
				add(1, j);
			}
		}	
	}
	for (int j = 1; j <= n; j++) {
		if (j < i || j >= i + k) {
			a[j]--;
		}
	}
}


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	//read(FILENAME);
	int n, k;
 	cin >> n >> k;
 	for (int i = 1; i <= n; i++) {
 		cin >> a[i];
 	}
	for (int i = n / k * k; i > 0; i -= k) {
		while (i < n && a[i] % k != a[i + 1] % k) {
			solve(n, k, i - k + 1);
		}
	}
	if (n % k != 0) {
		for (int i = n % k; i < n; i += k) {
			while (a[i] % k != a[i + 1] % k) {
				solve(n, k, i + 1);
			}
		}
	}
	for (int i = 1; i <= n - k; i++) {
		while (a[i] % k != a[i + 1] % k) {
			solve(n, k, i + 1);
		}
	}
	int maxlvl = 0;
	for (int i = 1; i <= n; i++) {
		chkmax(maxlvl, a[i]);
	}
	for (int i = 1; i <= n; i++) {
		while (a[i] < maxlvl) {
			add(1, i);
			a[i] += k;
		}
	}
	int i = 1;
	while (i < n && a[i] == a[i + 1]) {
		i++;
	}
	if (i == n) {
		cout << uk << '\n';
		for (int i = 0; i < uk; i++) {
			cout << t[i] << ' ' << x[i] << '\n';
		}
	} else {
		cout << -1 << '\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...