Cod sursa(job #116244)

Utilizator vlad.maneaVlad Manea vlad.manea Data 18 decembrie 2007 00:40:11
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <stdio.h>

#define infinit 2000000000

int A[310][310];

int V[3][610];

int N, i, j, min, xmin, ymin, aux, k, ind;

void read()
{
	freopen("grozavesti.in", "r", stdin);

	scanf("%d", &N);

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

void solve()
{
	for (k = 1; k <= N; k++)
	{
		// vreau sa pun pe pozitia (k, k) elementul minim din matrice

		min = xmin = ymin = infinit;

		for (i = k; i <= N; i++)
			for (j = k; j <= N; j++)
				if (A[i][j] <= min)
				{
					min = A[i][j];
					xmin = i;
					ymin = j;
				}

		// interschimb linia i cu linia k
		i = xmin;

		if (i != k)
		{
			++ind;
			V[0][ind] = i;
			V[1][ind] = k;
			V[2][ind] = 0;

			for (j = 1; j <= N; j++)
			{
				aux = A[i][j];
				A[i][j] = A[k][j];
				A[k][j] = aux;
			}
		}

		j = ymin;

		if (j != k)
		{
			++ind;
			V[0][ind] = j;
			V[1][ind] = k;
			V[2][ind] = 1;

			for (i = 1; i <= N; i++)
			{
				aux = A[i][j];
				A[i][j] = A[i][k];
				A[i][k] = aux;
			}
		}
	}
}

void write()
{
	freopen("grozavesti.out", "w", stdout);

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

	for (i = 1; i <= ind; i++)
	{
		if (V[2][i] == 0)
			printf("L ");
		else
			printf("C ");

		printf("%d %d\n", V[0][ind], V[1][ind]);
	}
}

int main()
{
	read();

	solve();

	write();

	return 0;
}