Cod sursa(job #309034)

Utilizator iulia609fara nume iulia609 Data 29 aprilie 2009 13:53:03
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#define dim 301
using namespace std;

int v[dim],o[dim],b[dim],w[dim],n;

void mergesort(int i, int m, int j)
{int x=i,k=1,y=m+1;
 while((x<=m)&&(y<=j))
	 if(v[x]<v[y])
	 {b[k++]=v[x++];w[k-1]=o[x-1];}
	  else
		  {b[k++]=v[y++];w[k-1]=o[y-1];}
 while(x<=m)
   {b[k++]=v[x++];w[k-1]=o[x-1];}
 while(y<=j)
   {b[k++]=v[y++];w[k-1]=o[y-1];}
 int t=i;
 for(k=1;k<=(j-i)+1;k++)
     {v[t++]=b[k];o[t-1]=w[k];}
}


void divimp(int i, int j)
{if(i<j)
  {int m=(i+j)>>1;
   divimp(i,m);
   divimp(m+1,j);
   mergesort(i,m,j);
   }	
}


int main()
{int k,i,j,aux,sol[602],x;

 FILE*f=fopen("grozavesti.in","r");
 FILE*g=fopen("grozavesti.out","w");
 
 fscanf(f,"%d",&n);
 //k=0;
 for(i=1;i<=n;i++)
	 for(j=1;j<=n;j++)
		if(i==j) fscanf(f,"%d",&v[i]),o[i]=i;
		  else fscanf(f,"%d",&x);

divimp(1,n);  

k=0;
for(i=1;i<=n;i++)
	if(i!=o[i])
	  {for(j=i+1;j<=n;j++)
		  if(i==o[j])
		    {aux=o[i];o[i]=o[j];o[j]=aux;
		     sol[++k]=o[i];sol[++k]=o[j];
			 break;
		    }			  
	   }
if(k==1)fprintf(g,"0\n");
else
fprintf(g,"%d\n",k);
for(i=1;i<=k;i+=2)
	{fprintf(g,"C %d %d\n",sol[i],sol[i+1]);
	 fprintf(g,"L %d %d\n",sol[i],sol[i+1]);
	 }

fclose(f);
fclose(g);
return 0;
	

}