Pagini recente » Cod sursa (job #3000207) | Cod sursa (job #36865) | Cod sursa (job #2612598) | Cod sursa (job #846460) | Cod sursa (job #986092)
Cod sursa(job #986092)
#include<stdio.h>
#include<set>
using namespace std;
FILE *f = fopen("grozavesti.in","r");
FILE *g = fopen("grozavesti.out","w");
#define MaxN 400
int N,Sol;
int A[MaxN][MaxN];
int SolV[MaxN*2][4];
void citire(void)
{
fscanf(f,"%d ",&N);
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
fscanf(f,"%d ",&A[i][j]);
}
void afisare(void)
{
for(int i=1;i<=N;i++,printf("\n"))
for(int j=1;j<=N;j++)
printf("%d ",A[i][j]);
printf("\n");
}
inline void swap(int a,int b,int c,int d)
{
int aux = A[a][b];
A[a][b] = A[c][d];
A[c][d] = aux;
}
inline void change(int poz,int diag)
{
if(poz == diag)
return ;
for(int i=1;i<=diag;i++)
swap(poz,i,diag,i);
SolV[++Sol][0] = 0;
SolV[Sol][1] = poz;
SolV[Sol][2] = diag;
for(int i=1;i<=diag;i++)
swap(i,poz,i,diag);
SolV[++ Sol][0] = 1;
SolV[Sol][1] = poz;
SolV[Sol][2] = diag;
}
void Rezolvare(void)
{
int valMax,valPoz;
for(int i=N;i;--i)
{
valMax = 0;
for(int j=1;j<=i;j++)
if(valMax <= A[j][j])
valMax = A[j][j],
valPoz = j;
change(valPoz,i);
//afisare();
}
}
int main()
{
citire();
Rezolvare();
fprintf(g,"%d\n",Sol);
for(int i=1;i<=Sol;i++)
fprintf(g,"%c %d %d\n",SolV[i][0] ? 'C' : 'L',SolV[i][1],SolV[i][2]);
}