Cod sursa(job #2478146)

Utilizator davidcotigacotiga david davidcotiga Data 21 octombrie 2019 18:23:35
Problema Grozavesti Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <fstream>
#include <string.h>

using namespace std;

ifstream cin("grozavesti.in");
ofstream cout("grozavesti.out");

void swap(int& a, int& b) {
	int aux = a;
	a = b;
	b = aux;
}

int main() {
	int n, rez = 0;
	int s[3000][3];
	cin >> n;
	int v[301][301];
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= n; ++j)
			cin >> v[i][j];

	int min = 1000000, pozX, pozY;
	for (int i = 1; i <= n; ++i) {
		min = 1000000;
		for (int l = i; l <= n; ++l)
			for (int c = i; c <= n; ++c)
				if (v[l][c] < min && v[l][c] > v[i - 1][i - 1]) {
					min = v[l][c];
					pozX = l;
					pozY = c;
				}

		if (pozX == i && pozY != i) {
			++rez;
			for (int k = 1; k <= n; ++k)
				swap(v[k][pozY], v[k][i]);
			//cout << "C " << pozY << " " << i;
			s[rez - 1][0] = (int)'C';
			s[rez - 1][1] = pozY;
			s[rez - 1][2] = i;
		}
		else if (pozY == i && pozX != i) {
			++rez;
			for (int k = 1; k <= n; ++k)
				swap(v[pozX][k], v[i][k]);
			//cout << "L " << pozX <<  " " << i;
			s[rez - 1][0] = (int)'L';
			s[rez - 1][1] = pozX;
			s[rez - 1][2] = i;
		}
		else if (pozX != i && pozY != i) {
			rez += 2;
			for (int k = 1; k <= n; ++k)
				swap(v[pozX][k], v[i][k]);
			for (int k = 1; k <= n; ++k)
				swap(v[k][pozY], v[k][i]);
			//cout << "L " << pozX << " " << i;
			s[rez - 2][0] = (int)'L';
			s[rez - 2][1] = pozX;
			s[rez - 2][2] = i;
			//cout << "C " << pozY << " " << i;
			s[rez - 1][0] = (int)'C';
			s[rez - 1][1] = pozY;
			s[rez - 1][2] = i;
		}
	}
	cout << rez << "\n";
	for (int i = 0; i < rez; ++i)
		cout << (char)s[i][0] << " " << s[i][1] << " " << s[i][2] << "\n";

	return 0;
}