Cod sursa(job #196998)

Utilizator gcosminGheorghe Cosmin gcosmin Data 30 iunie 2008 17:34:04
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>

#define NMAX 310

int N;

int a[NMAX][NMAX];

int nsol;
char sol[2 * NMAX];
int xx[2 * NMAX];
int yy[2 * NMAX];

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

void swap_lin(int x, int y)
{
	if (x == y) return;

	nsol++; sol[nsol] = 'L'; xx[nsol] = x; yy[nsol] = y;

	for (int i = 1; i <= N; i++) SWAP(a[x][i], a[y][i]);
}

void swap_col(int x, int y)
{
	if (x == y) return;

	nsol++; sol[nsol] = 'C'; xx[nsol] = x; yy[nsol] = y;

	for (int i = 1; i <= N; i++) SWAP(a[i][x], a[i][y]);
}

int main()
{
	int i, j, k, ii, jj, mn;

	freopen("grozavesti.in", "r", stdin);
	freopen("grozavesti.out", "w", stdout);

	scanf("%d", &N);

	for (i = 1; i <= N; i++)
		for (j = 1; j <= N; j++)
			scanf("%d", &a[i][j]);

	for (k = 1; k < N; k++) {
		mn = a[k][k]; ii = k; jj = k;

		for (i = k; i <= N; i++)
			for (j = k; j <= N; j++)
				if (a[i][j] < mn) mn = a[i][j], ii = i, jj = j;

		swap_lin(k, ii);
		swap_col(k, jj);
	}

	printf("%d\n", nsol);

	for (i = 1; i <= nsol; i++) printf("%c %d %d\n", sol[i], xx[i], yy[i]);

return 0;
}