Cod sursa(job #115291)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 16 decembrie 2007 12:01:52
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasele 5-8 Marime 1.43 kb
#include <stdio.h>

int a[31][31], n, contor;

typedef struct
{
	int op, i, j;
} solutie;
solutie sol[700];

void interschimb_coloane(int x, int y)
{
	int i;
	for (i = 1; i <= n; i++)
	{
		a[i][0] = a[i][x];
		a[i][x] = a[i][y];
		a[i][y] = a[i][0];
	}
}

void interschimb_linii(int x, int y)
{	
	int i;
	for (i = 1; i <= n; i++)
	{
		a[0][i] = a[x][i];
		a[x][i] = a[y][i];
		a[y][i] = a[0][i];
	}
}

int main()
{
	freopen("grozavesti.in","r",stdin);
	freopen("grozavesti.out","w",stdout);
	scanf("%d", &n);
	int i, j, min, poz;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= n; j++) scanf("%d",&a[i][j]);

	for (i = 1; i <= n; i++)
	{
		min = 32000; poz = i;
		for (j = i; j <= n; j++)
			if (a[i][j] >= a[i-1][i-1])
			   if (min > a[i][j])
			   {
				min = a[i][j]; poz = j;
			   }


		if (poz != i)
		{
			interschimb_coloane(i,poz);
			sol[++contor].op = 1;
			sol[contor].i = i;
			sol[contor].j = poz;
		}

		min = 32000; poz = i;
		for (j = i; j <= n; j++)
			if (a[j][i] >= a[i-1][i-1])
			   if (min > a[j][i])
			   {
				min = a[j][i]; poz = j;
			   }

		if (poz != i)
		{
			interschimb_linii(i,poz);
			sol[++contor].op = 2;
			sol[contor].i = i;
			sol[contor].j = poz;			
		}
	}

	char c;
	printf("%d\n",contor);
	for (i = 1; i <= contor; i++)
	{
		if (sol[i].op == 1) c = 'C';
		else c = 'L';
		printf("%c %d %d\n", c, sol[i].i, sol[i].j);
	}
	return 0;
}