Cod sursa(job #115497)

Utilizator razvan2006razvan brezulianu razvan2006 Data 16 decembrie 2007 12:51:03
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasele 5-8 Marime 1.24 kb
#include<stdio.h>

long i, j, n, a[301][301], lmin, cmin, k, aux, min, l, c, nr1, ok, nr2, sol1[601][3], sol2[601][3];
FILE *fin, *fout;

int main()
{
	fin = fopen("grozavesti.in", "rt");
	fout = fopen("grozavesti.out", "wt");

	fscanf(fin, "%ld", &n);

	for(i = 1; i <= n; i++)
		for(j = 1; j <= n; j++)
			fscanf(fin, "%ld", &a[i][j]);

	for(k = 1; k < n; k++)
	{
		ok = 1;

		min = a[k][k];
		lmin = k;
		cmin = k;

		for(i = k; i <= n; i++)
				for(j = k; j <= n; j++)
					if(a[i][j] < min)
					{
						min = a[i][j];
						lmin = i;
						cmin = j;
					}

		if(lmin != k)
		{
			for(c = 1; c <= n; c++)
			{
				aux = a[lmin][c];
				a[lmin][c] = a[k][c];
				a[k][c] = aux;
			}

			nr1++;

			sol1[nr1][1] = lmin;
			sol1[nr1][2] = k;

			ok = 0;
		}

		if(cmin != k && ok == 1)
		{
			for(l = 1; l <= n; l++)
			{
				aux = a[l][cmin];
				a[l][cmin] = a[l][k];
				a[l][k] = aux;
			}

			nr2++;

			sol2[nr2][1] = k;
			sol2[nr2][2] = cmin;

			ok = 0;
		}
	}

	fprintf(fout, "%ld", nr1 + nr2);

	for(i = 1; i <= nr1; i++)
		fprintf(fout, "L %ld %ld\n", sol1[i][1], sol1[i][2]);

	for(i = 1; i <= nr2; i++)
		fprintf(fout, "C %ld %ld\n", sol2[i][1], sol2[i][2]);

	return 0;
}