Cod sursa(job #330302)

Utilizator Andrei200Andrei200 Andrei200 Data 9 iulie 2009 14:37:39
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <cstdio>
#include <cstring>


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

#define Nmax 310

struct g
{
	char c;
	int ind1,ind2;
}s[2*Nmax];

int n,ok,nr,nrsol;
int a[Nmax][Nmax];
int v[1000000];
int nrm=0;


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

int main()
{
	int i,j,x;
	freopen(file_in,"r",stdin);
	
	scanf("%d", &n);
	nr=0;
	memset(v,0,sizeof(v));
	for (i=1;i<=n;++i)
		 for (j=1;j<=n;++j)
		 {
			 scanf("%d", &a[i][j]);
			 v[a[i][j]]++;
			 if (v[a[i][j]]==1) nr++;
		 }
	fclose(stdin);	 

	nrsol=0;
	nrm=1;
	for (x=1;x<=nr && !bun() && nrm!=nr;++x)
	{
		ok=0;
		if (v[x]!=0)
		{
		for (i=1;i<=n && !ok;++i)
			 for (j=1;j<=n && !ok;++j)
				  if (a[i][j]==x)
				  {
					  if (i==nrm || j==nrm) //e la locul lui
					  {
						  ok=1;
						  a[i][j]=0;
					  }
					  else
					  {
						  nrsol++;
						  s[nrsol].c='C';
						  s[nrsol].ind1=nrm;
						  s[nrsol].ind2=j;
						  nrsol++;
						  s[nrsol].c='L';
						  s[nrsol].ind1=nrm;
						  s[nrsol].ind2=i;
						  ok=1;
					  }
				  }
		}
		nrm++;
	}
    freopen(file_out,"w",stdout);
	printf("%d\n", nrsol);
	for (i=1;i<=nrsol;++i)
		 printf("%c %d %d\n", s[i].c,s[i].ind1,s[i].ind2);

	fclose(stdout);

	return 0;
}