Cod sursa(job #2059888)

Utilizator Gl0WCula Stefan Gl0W Data 7 noiembrie 2017 18:31:55
Problema Tablete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.52 kb
#include <fstream>

using namespace std;

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

int n, k, m = 1, v[1005][1005];

int main()
{
    fin>>n>>k;
    if(n % 2 == 0 && k % 2 == 0){
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                fout<<m++<<" ";
            }
            fout<<"\n";
        }
    }
    else if(n % 2 == 1 && k % 2 == 0){
        for(int i = 1; i <= n; i++){
            v[i][1] = m++;
        }
        for(int i = 1; i <= n; i++){
            for(int j = 2; j <= n; j++){
                v[i][j] = m++;
            }
        }
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                fout<<v[i][j]<<" ";
            }
            fout<<"\n";
        }
    }
    else if(n % 2 == 0 && k % 2 == 1){
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                v[j][i] = m++;
            }
        }
        for(int i = 1; i <= n; i++){
            if(v[i][k] % 2 == 1){
                swap(v[i + 1][k - 1], v[i][k]);
            }
        }
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                fout<<v[i][j]<<" ";
            }
            fout<<"\n";
        }
    }
    else if(n % 2 == 1 && k % 2 == 1){
        int i;
        for(i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                v[j][i] = m++;
            }
        }
        for(i = 1; i < n- 1; i++){
            if(v[i][k] % 2 == 1){
                swap(v[i + 2][k - 1], v[i][k]);
            }
        }
        i = n;
        swap(v[i - 2][k + 1], v[i][k]);

        for(int i = 1; i < n; i++){
            for(int j = 1; j < n; j++){
                if(v[i][k - 1] > v[i + 1][k - 1]){
                    swap(v[i][k - 1], v[i + 1][k - 1]);
                }
            }
        }
        for(int i = 1; i < n; i++){
            for(int j = 1; j < n; j++){
                if(v[i][k] > v[i + 1][k]){
                    swap(v[i][k], v[i + 1][k]);
                }
            }
        }
        for(int i = 1; i < n; i++){
            for(int j = 1; j < n; j++){
                if(v[i][k + 1] > v[i + 1][k + 1]){
                    swap(v[i][k + 1], v[i + 1][k + 1]);
                }
            }
        }
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                fout<<v[i][j]<<" ";
            }
            fout<<"\n";
        }
    }
    return 0;
}