Cod sursa(job #136119)

Utilizator TabaraTabara Mihai Tabara Data 15 februarie 2008 01:20:01
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.12 kb
#include <stdio.h>
using namespace std;

#include <sstream>
#include <vector>

#define in "grozavesti.in"
#define out "grozavesti.out"
#define NMAX 305

int n;
int A[NMAX][NMAX];
vector<string> sol;

int main()
{
    freopen( in, "r", stdin );
    freopen( out, "w", stdout );
    
    scanf( "%d", &n );
    int i, j, k;

    for ( i = 1; i <= n; ++i )
        for ( j = 1; j <= n; ++j )
            scanf( "%d", &A[i][j] );
            
    int minim, ipoz, jpoz;
    for ( i = 1; i <= n; ++i )
    {
        ostringstream ss;
        string prov = "";
        // matricea cu coltul din stanga-sus in (i,i)
        minim = 1000111;
        for ( j = i; j <= n; ++j )
        {
            for ( k = i; k <= n; ++k )
            {
                if ( A[j][k] < minim ) { minim = A[j][k]; ipoz = j; jpoz = k; }
            }
        }
        if ( ipoz == i && jpoz == i ) continue;
        else if ( ipoz == i && jpoz != i )
        {
             for ( j = 1; j <= n; ++j )
             {
                 int aux = A[j][i];
                 A[j][i] = A[j][jpoz];
                 A[j][jpoz] = aux;
             }
             //printf( "C %d %d\n", i, jpoz );
             ss << "C "; ss << i << " " << jpoz;
             prov = ss.str();
             sol.push_back( prov );
        }
        else if ( ipoz != i && jpoz == i )
        {
             for ( j = 1; j <= n; ++j )
             {
                 int aux = A[i][j];
                 A[i][j] = A[ipoz][j];
                 A[ipoz][j] = aux;
             }
             //printf( "L %d %d\n", ipoz, i );
             ss << "L "; ss << i << " " << ipoz;
             prov = ss.str();
             sol.push_back( prov );
        } 
        else if ( i != ipoz && i != jpoz )
        {
             for ( j = 1; j <= n; ++j )
             {
                 int aux = A[j][i];
                 A[j][i] = A[j][jpoz];
                 A[j][jpoz] = aux;
             }
             for ( j = 1; j <= n; ++j )
             {
                 int aux = A[i][j];
                 A[i][j] = A[ipoz][j];
                 A[ipoz][j] = aux;
             }
             //printf( "C %d %d\n", i, jpoz );
             ss << "C "; ss << i << " " << jpoz;
             prov = ss.str();
             sol.push_back( prov );
             //printf( "L %d %d\n", i, ipoz );
             ostringstream sss;
             prov = "";
             sss << "L "; sss << i << " " << ipoz;
             prov = sss.str();
             sol.push_back( prov );
        }
        /*
        for ( i = 1; i <= n; ++i )
        {
            for ( j = 1; j <= n; ++j )
                printf( "%d ", A[i][j] );
            printf( "\n" );
        }
        printf( "\n" );*/
        
    }
    printf( "%d\n", sol.size() );
    for ( i = 0; i < sol.size(); ++i )
        printf( "%s\n", sol[i].c_str() );
    for ( i = 1; i <= n; ++i )
        {
            for ( j = 1; j <= n; ++j )
                printf( "%d ", A[i][j] );
            printf( "\n" );
        }
    return 0;
}