Cod sursa(job #1486454)

Utilizator dnprxDan Pracsiu dnprx Data 14 septembrie 2015 21:17:42
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

int n, a[305][305], cnt;

struct trio
{
    char ch;
    int x, y;
};
trio t[700];

void Citire()
{
    int i, j;
    ifstream fin("grozavesti.in");
    fin >> n;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            fin >> a[i][j];
    fin.close();
}

void SchLin(int k, int p)
{
    int i;
    for (i = 1; i <= n; i++)
        swap(a[k][i], a[p][i]);
}

void SchCol(int k, int p)
{
    int i;
    for (i = 1; i <= n; i++)
        swap(a[i][k], a[i][p]);
}

/// determina pozitia minimului dintre a[i,i],...,a[n,n]
int Minim(int k)
{
    int i, p;
    p = k;
    for (i = k + 1; i <= n; i++)
        if (a[p][p] > a[i][i])
        p = i;
    return p;
}

void Rezolva()
{
    int i, k;
    trio w;
    cnt = 0;
    for (i = 1; i <= n; i++)
    {
        k = Minim(i);
        if (k != i)
        {
            w.ch = 'L'; w.x = i; w.y = k;
            t[++cnt] = w;
            w.ch = 'C';
            t[++cnt] = w;
            SchLin(k, i);
            SchCol(k, i);
        }
    }
    ofstream fout("grozavesti.out");
    fout << cnt << "\n";
    for (i = 1; i <= cnt; ++i)
        fout << t[i].ch << " " << t[i].x << " " << t[i].y << "\n";
    fout.close();
}

int main()
{
    Citire();
    Rezolva();
    return 0;
}