Cod sursa(job #2060904)

Utilizator AndreiSorin26012001Cirpici Andrei Sorin AndreiSorin26012001 Data 8 noiembrie 2017 19:37:44
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("tablete.in");
ofstream out("tablete.out");

int n, k;
int arr[1005][1005];

void sortare( int col, int left = 1, int right = n ){

    int i = left, j = right;
    int tmp;
    int pivot = arr[(left + right) / 2][col];

    while (i <= j) {
        while (arr[i][col] < pivot)
              i++;
        while (arr[j][col] > pivot)
              j--;
        if (i <= j) {
              tmp = arr[i][col];
              arr[i][col] = arr[j][col];
              arr[j][col] = tmp;
              i++;
              j--;
        }
    }

    if (left < j)
        sortare(col, left, j);
    if (i < right)
        sortare(col, i, right);

}

void afisare(){

    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++)
            out<<arr[i][j]<<" ";
        out<<"\n";
    }
}

int main()
{
    in>>n>>k;

    if( n % 2 == 0 && k % 2 == 0 ){
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                arr[i][j] = (i - 1)*n + j;

        afisare();
        return 0;
    }

    if( n % 2 == 1 && k % 2 == 0 ){

        for(int i = 1; i <= n; i++)
            for(int j = 2; j <= n; j++)
                arr[i][j] = (i - 1)*n + j + n - i;
        for(int j = 1; j <= n; j++)
            arr[j][1] = j;

        afisare();
        return 0;
    }

    if( n % 2 == 0 && k % 2 == 1 ){

        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                arr[j][i] = (i - 1)*n + j;

        for(int i = 1; i < n; i++)
            if( arr[i][k] % 2 == 1 )
                swap( arr[i][k], arr[i + 1][k - 1] );

        afisare();
        return 0;
    }

    if( n % 2 == 1 && k % 2 == 1 ){

         for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                arr[j][i] = (i - 1)*n + j;

        for(int i = 1; i < n; i++)
            if( arr[i][k] % 2 == 1 )
                swap( arr[i][k], arr[i + 2][k - 1] );
        swap( arr[n][k], arr[n - 2][k + 1] );

        sortare( k - 1 );
        sortare( k );
        sortare( k + 1 );

        afisare();
        return 0;
    }

    return 0;
}