Cod sursa(job #2338703)

Utilizator oneorzeroOne or zero oneorzero Data 7 februarie 2019 18:47:46
Problema Grozavesti Scor 0
Compilator cpp-64 Status done
Runda prega_agm_grupa1_contest1 Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

int v[305][305];
vector<pair<char, pair<int, int> > > ans;

int n;

void schimb(int p1, int p2){
    ans.push_back(make_pair('C', make_pair(p1, p2)));
    ans.push_back(make_pair('L', make_pair(p1, p2)));
    for(int i = 1; i <= n; ++i)
        swap(v[p1][i], v[p2][i]);
    for(int i = 1; i <= n; ++i)
        swap(v[i][p1], v[i][p2]);
}

void quick(int st, int dr){
    if(st >= dr)
        return;
    int l = st, h = dr, mij = (st + dr) / 2;
    int piv = v[mij][mij];
    while(l < h){
        while(v[l][l] < piv)
            l++;
        while(v[h][h] > piv)
            h--;
        if(l == h)
            return;
        schimb(l, h);
        l++;
        h--;
    }
    if(l <= h){
        quick(st, l);
        quick(h + 1, dr);
    }
    else{
        quick(st, h);
        quick(l, dr);
    }
}

int main()
{
    ifstream fin("grozavesti.in");
    ofstream fout("grozavesti.out");
    fin >> n;
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= n; ++j)
            fin >> v[i][j];
    }
    quick(1, n);
    fout << ans.size() << "\n";
    for(int i = 0; i < int(ans.size()); ++i)
        fout << ans[i].first << " " << ans[i].second.first << " " << ans[i].second.second << "\n";
    return 0;
}