Cod sursa(job #120554)

Utilizator slayer4uVictor Popescu slayer4u Data 5 ianuarie 2008 21:09:05
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <stdio.h>

long n, i, j, nr_mutari, k, min, mini, g, l, x[500][500];

struct lol
{
	char c;
	long first, second;
};
lol mutare[1000];

void move_c(long a, long b)
{
	long i, aux[500];
	for (i = 1; i <= n; i ++)
		aux[i] = x[i][a];
	for (i = 1; i <= n; i ++)
		x[i][a] = x[i][b];
	for (i = 1; i <= n; i ++)
		x[i][b] = aux[i];
}

void move_l(long a, long b)
{
	long i, aux[500];
	for (i = 1; i <= n; i ++)
		aux[i] = x[a][i];
	for (i = 1; i <= n; i ++)
		x[a][i] = x[b][i];
	for (i = 1; i <= n; i ++)
		x[b][i] = aux[i];
}

int main()
{
	freopen ("grozavesti.in", "rt", stdin);
	freopen ("grozavesti.out", "wt", stdout);

	scanf("%ld", &n);

	for (i = 1; i <= n; i ++)
		for (j = 1; j <= n; j ++)
			scanf("%ld", &x[i][j]);

	for (k = 1; k <= n; k ++)
	{
		min = 2147000000;
		for (i = k; i <= n; i ++)
			if (x[i][i] < min)
			{
				min = x[i][i];
				mini = i;
			}
		if (mini != k)
		{
			mutare[++ nr_mutari].c = 'C';
			mutare[nr_mutari].first = k;
			mutare[nr_mutari].second = mini;
			move_c(k, mini);
			mutare[++ nr_mutari].c = 'L';
			mutare[nr_mutari].first = k;
			mutare[nr_mutari].second = mini;
			move_l(k, mini);
		}
	}

	printf("%ld\n", nr_mutari);
	for (i = 1; i <= nr_mutari; i ++)
		printf("%c %ld %ld\n", mutare[i].c, mutare[i].first, mutare[i].second);

	return 0;
}