Cod sursa(job #309032)

Utilizator bugyBogdan Vlad bugy Data 29 aprilie 2009 13:47:29
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<iostream.h>
#include<stdio.h>
#define dim 301
//using namespace std;

struct bugy
{
	int val;
	int ind;
};

bugy v[dim], w[dim];

void merge_sort(int li, int ls)
{
	int j,i,k,jum;
	if(li==ls) return;
	jum=(li+ls)/2;
	merge_sort(li,jum);
	merge_sort(jum+1,ls);
	i=li;j=jum+1;k=li;
	
	while((i<=jum)||(j<=ls))
	{
		if(j>ls || ( (i<=jum) && (v[i].val < v[j].val)) )
		{
			w[k] = v[i];
			k++;
			i++;
		}
		else
		{
			w[k] = v[j];
			k++;
			j++;
		}
	}
	
	for(i = li; i <= ls; i++)
		v[i] = w[i];
}

struct bugy2
{
	int r;
	int s;
} mutari[2*dim];

int main()
{

FILE *f=fopen("grozavesti.in","r"), *g=fopen("grozavesti.out","w");
int n,mm, i, j, x;
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
		{fscanf(f,"%d",&x);
	     if(i==j)
			 {v[i].val=x;
			  v[i].ind=i;
			 }
		}


merge_sort(1,n);

mm=1;
int man;
for(i=1;i<=n;i++)
	if(i!=v[i].ind)
	{
		mutari[mm].r=i;
		mutari[mm].s=v[i].ind;

		mm++;

		man = v[i].ind;

		v[i].ind=i;

		for(j=i+1;j<=n;j++)
			if(v[j].ind==i)
				v[j].ind=man;
	}
	if(mm==1)
		fprintf(g,"0\n");
	else{
		fprintf(g,"%d",2*mm);
		for(i=1;i<=mm;i++)
			fprintf(g,"L %d %d \n C %d %d \n",mutari[i].r, mutari[i].s, mutari[i].r, mutari[i].s);
	}
	
		

	return 0;
}