Cod sursa(job #1868149)

Utilizator antanaAntonia Boca antana Data 4 februarie 2017 17:03:56
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <cstdio>
#include <algorithm>

#define MAXN 301
#define INF 0x3f3f3f3f

using namespace std;

int v[MAXN][MAXN], n;

inline void swapCols(int a, int b){
    for(int i=1; i<=n; ++i)
        swap(v[i][a], v[i][b]);
}

inline void swapRows(int a, int b){
    for(int i=1; i<=n; ++i)
        swap(v[a][i], v[b][i]);
}

struct answer{
    int a, b;
    char type;
}ans[MAXN*2];

int main()
{
    freopen("grozavesti.in", "r", stdin);
    freopen("grozavesti.out", "w", stdout);

    int step, i, j, minval, row, col, k = 0;

    scanf("%d", &n);

    for(i=1; i<=n; ++i)
        for(j=1; j<=n; ++j)
            scanf("%d", &v[i][j]);

    for(step=1; step<n; ++step)
    {
        minval = INF;
        for(i=step; i<=n; ++i)
            for(j=step; j<=n; ++j)
            {
                if(v[i][j] < minval)
                {
                    minval = v[i][j];
                    row = i;
                    col = j;
                }
            }

        if(row != step)
        {
            swapRows(row, step);
            ans[++k].a = row;
            ans[k].b = step;
            ans[k].type = 'L';
        }

        if(col != step)
        {
            swapCols(col, step);
            ans[++k].a = col;
            ans[k].b = step;
            ans[k].type = 'C';
        }
    }

    printf("%d\n", k);

    for(i=1; i<=k; ++i)
        printf("%c %d %d\n", ans[i].type, ans[i].a, ans[i].b);

    return 0;
}