Cod sursa(job #373294)

Utilizator Andrei200Andrei200 Andrei200 Data 13 decembrie 2009 12:59:48
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

#define file_in "grozavesti.in"
#define file_out "grozavesti.out"

#define Nmax 310

int a[Nmax][Nmax];
int n,nrint,v1[Nmax*2],v2[Nmax*2];
int sir[Nmax*Nmax],nr;

int ok()
{
	for (int i=2;i<=n;++i)
		 if (a[i-1][i-1]>a[i][i])
			 return 0;
	return 1;
}	

void swap(int *a, int *b)
{
	int aux=*a; 
	*a=*b; 
	*b=aux;
}

void scl(int x, int y)
{
	int i;
	for(i=x;i<=n;++i)
		swap(&a[x][i],&a[y][i]);
}

void scc(int x, int y)
{
	int i;
	for(i=x;i<=n;++i)
		swap(&a[i][x],&a[i][y]);
}


int main()
{
	int i,j,k,x;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	
	scanf("%d", &n);
	nr=0;
	for (i=1;i<=n;++i)
		 for (j=1;j<=n;++j)
		 {
			 scanf("%d", &a[i][j]);
			 sir[++nr]=a[i][j];
		 }
		 
	sort(sir+1,sir+nr+1);	 
		 
	nrint=0;
	while(!ok())
	{
		for (k=1;k<=n;++k)
		{
			x=sir[k];
			//cauta pe primu` x;
			for (i=1;i<=n;++i)
				 for (j=1;j<=n;++j)
					  if (a[i][j]==x && i!=k && j!=k)
					  {
						  nrint++;
						  v1[nrint]=k;
						  v2[nrint]=j;
						  scc(k,j);
					  }
		}
	}
	
	printf("%d\n", nrint);
	for (i=1;i<=nrint;++i)
		 printf("C %d %d\n", v1[i],v2[i]);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}