Cod sursa(job #115569)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 16 decembrie 2007 12:59:14
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasele 5-8 Marime 1.71 kb
#include<stdio.h>
long n,i,j,u,sortat,aux,k,nr,v[91],l[91],c[91],sol[3][61],a[31][31];
char ch[601];
int main()
{
freopen("grozavesti.in","r",stdin);
freopen("grozavesti.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
    {
    scanf("%ld",&v[++u]);
    l[u]=i;
    c[u]=j;
    }
do
  {
  sortat=1;
  for(i=1;i<u;i++)
    if(v[i]>v[i+1])
      {
      aux=v[i];
      v[i]=v[i+1];
      v[i+1]=aux;
      aux=l[i];
      l[i]=l[i+1];
      l[i+1]=aux;
      aux=c[i];
      c[i]=c[i+1];
      c[i+1]=aux;
      sortat=0;
      }
  }while(!sortat);
nr=1;
for(i=1;i<=u;i++)
  if(a[l[i]][c[i]]==0)
    {
    for(j=1;j<=n;j++)
      a[j][c[i]]=1;
    for(j=1;j<=n;j++)
      a[l[i]][j]=1;
    if(l[i]==nr && c[i]!=nr && a[nr][nr]==0) //elem se afla pe linia nr si coloana != de nr
      {
      ch[++k]='C';
      sol[1][k]=c[i];
      sol[2][k]=nr;
      for(j=nr;j<=n;j++)
	{
	a[j][nr]=1;
	a[nr][j]=1;
	}
      nr++;
      }
    else
      if(l[i]!=nr && c[i]==nr && a[nr][nr]==0)//elem se afla pe col nr si linia !=nr
	{
	ch[++k]='L';
	sol[1][k]=l[i];
	sol[2][k]=nr;
	for(j=nr;j<=n;j++)
	  {
	  a[j][nr]=1;
	  a[nr][j]=1;
	  }
	nr++;
	}
      else //elem nu se afla pe linia nr si col nr
	if(c[i]!=nr && l[i]!=nr && a[nr][nr]==0)
	  {
	  ch[++k]='C';
	  sol[1][k]=c[i];
	  sol[2][k]=nr;
	  ch[++k]='L';
	  sol[1][k]=l[i];
	  sol[2][k]=nr;
	  for(j=nr;j<=n;j++)
	    {
	    a[j][nr]=1;
	    a[nr][j]=1;
	    }
	  nr++;
	  }
	else
	  {
	  for(j=nr;j<=n;j++)
	    {
	    a[j][nr]=1;
	    a[nr][j]=1;
	    }
	  nr++;
	  }
    }
printf("%ld\n",k);
for(i=1;i<=k;i++)
  printf("%c %ld %ld\n",ch[i],sol[1][i],sol[2][i]);
return 0;
}