Cod sursa(job #1788302)

Utilizator giotoPopescu Ioan gioto Data 25 octombrie 2016 21:26:42
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <cstdio>
#include <vector>
using namespace std;

vector<pair <int, int> > v;
int n, a[302][302];
inline void Swap_line(int i){
    for(int j = 1 ; j <= n ; ++j){
        int aux = a[i][j];
        a[i][j] = a[i - 1][j];
        a[i - 1][j] = aux;
    }
}
inline void Swap_column(int i){
    for(int j = 1 ; j <= n ; ++j){
        int aux = a[j][i];
        a[j][i] = a[j][i - 1];
        a[j][i - 1] = aux;
    }
}
int main()
{
    freopen("grozavesti.in", "r", stdin);
    freopen("grozavesti.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1 ; i <= n ; ++i)
        for(int j = 1 ; j <= n ; ++j)
            scanf("%d", &a[i][j]);

    int i = 2, NR = 0;
    while(i <= n){
        if(a[i][i] < a[i - 1][i - 1]){
            if(a[i][i - 1] <= a[i - 1][i]){
                v.push_back(make_pair(i - 1, 0));
                Swap_line(i); ++NR;
            }
            else{
                v.push_back(make_pair(i - 1, 1));
                Swap_line(i); Swap_column(i);
                NR += 2;
            }
            if(i > 2) --i;
                 else ++i;
        }
        else ++i;
    }
    printf("%d\n", NR);
    for(int i = 0 ; i < v.size() ; ++i){
        printf("L %d %d\n", v[i].first, v[i].first + 1);
        if(v[i].second == 1)
            printf("C %d %d\n", v[i].first, v[i].first + 1);
    }
    return 0;
}