Cod sursa(job #986093)

Utilizator maritimCristian Lambru maritim Data 17 august 2013 17:33:04
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#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][3];

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]);
}

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);

    ++ Sol;
    SolV[Sol][1] = poz;
    SolV[Sol][2] = diag;

    for(int i=1;i<=diag;i++)
        swap(i,poz,i,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<<1);
    for(int i=1;i<=Sol;i++)
        fprintf(g,"L %d %d\nC %d %d\n",SolV[i][1],SolV[i][2],SolV[i][1],SolV[i][2]);
}