Cod sursa(job #124724)

Utilizator DastasIonescu Vlad Dastas Data 19 ianuarie 2008 19:34:27
Problema Grozavesti Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <cstdio>

const int maxn = 301;

FILE *in = fopen("grozavesti.in","r"), *out = fopen("grozavesti.out","w");

int n;

int a[maxn][maxn];
int m[2*maxn][2];
int w[2*maxn];

void read()
{
    fscanf(in, "%d", &n);

    for ( int i = 1; i <= n; ++i )
        for ( int j = 1; j <= n; ++j )
            fscanf(in, "%d", &a[i][j]);
}

int main()
{
    read();

    int cnt = 0;
    for ( int x = 1; x <= n; ++x )
    {
        int min = a[x][x];
        int px = x, py = x;

        for ( int i = x; i <= n; ++i )
            for ( int j = x; j <= n; ++j )
                if ( a[i][j] < min )
                    min = a[i][j], px = i, py = j;

        if ( px != x || py != x )
        {
            if ( x != py )
            {
                ++cnt;
                w[cnt] = 1; // c
                m[cnt][0] = py;
                m[cnt][1] = x;
            }

            if ( x != px )
            {
                ++cnt;
                w[cnt] = 2; // l
                m[cnt][0] = px;
                m[cnt][1] = x;
            }

            for ( int i = 1; i <= n; ++i )
            {
                int t = a[x][i];
                a[x][i] = a[px][i];
                a[px][i] = t;

                t = a[i][x];
                a[i][x] = a[i][py];
                a[i][py] = t;
            }
        }
    }

    fprintf(out, "%d\n", cnt);
    for ( int i = 1; i <= cnt; ++i )
    {
        if ( w[i] == 1 )
            fprintf(out, "C ");
        else
            fprintf(out, "L ");

        fprintf(out, "%d %d\n", m[i][0], m[i][1]);
    }

	return 0;
}