Cod sursa(job #112244)

Utilizator astronomyAirinei Adrian astronomy Data 3 decembrie 2007 22:44:03
Problema Grozavesti Scor Ascuns
Compilator cpp Status done
Runda Marime 1.46 kb
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

#define MAXN 310
#define pb push_back
#define PII pair<int, int>
#define mp make_pair
#define x first
#define y second

int N, A[MAXN][MAXN];
vector< PII > sol;

void solve(void)
{
    int i, j, k, val, l, c;
    
    for(i = 1; i <= N; i++)
    {
        for(val = 1<<20, j = i; j <= N; j++)
         for(k = i; k <= N; k++)
          if(A[j][k] < val)
            val = A[j][k], l = j, c = k;

        if(i != l)
            sol.pb( mp(i, l) );
        if(i != c)
            sol.pb( mp(i+N, c+N) );

        for(j = i; j <= N; j++)
         if(i != l)
          A[i][j]^=A[l][j], A[l][j]^=A[i][j], A[i][j]^=A[l][j];
        for(j = i; j <= N; j++)
         if(i != c)
            A[j][i]^=A[j][c], A[j][c]^=A[j][i], A[j][i]^=A[j][c];
    }
}

void read_data(void)
{
    int i, j;

    scanf("%d", &N);
    for(i = 1; i <= N; i++)
     for(j = 1; j <= N; j++)
        scanf("%d ", &A[i][j]);
}

void write_data(void)
{
    int i;

    printf("%d\n", sol.size());

    for(i = 0; i < sol.size(); i++)
    {
        if(sol[i].x <= N)
            printf("L %d %d\n", sol[i].x, sol[i].y);
        else
            printf("C %d %d\n", sol[i].x-N, sol[i].y-N);
    }
}

int main(void)
{
    freopen("grozavesti.in", "rt", stdin);
    freopen("grozavesti.out", "wt", stdout);

    read_data();
    solve();
    write_data();

    return 0;
}