Cod sursa(job #1893484)

Utilizator Mihai_PredaPreda Mihai Dragos Mihai_Preda Data 25 februarie 2017 18:33:29
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int nMax = 1005;

int n, k;
int sol[nMax][nMax];

void citire()
{
    in >> n >> k;
}

void rezolvare()
{
    if(n % 2 == 0)
    {
        if(k % 2 == 0)
        {
            for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= n; ++j)
                    sol[i][j] = (i - 1) * n + j;
        }
        else
        {
            for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= n; ++j)
                    sol[i][j] = (i - 1) * n + j-1;
            sol[1][1] = n * n;
            swap(sol[1][1], sol[n][n]);
            swap(sol[1][k], sol[2][1]);
            sort(sol[1] + 1, sol[1] + n + 1);
        }
    }
    else
    {
        for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= n; ++j)
                {
                    sol[i][j] = (i - 1) * n + j;
                }
        if(k % 2 == 0)
        {
            for(int i = 2; i < n; i += 2)
            {
                swap(sol[i][1], sol[i+1][1]);
                sort(sol[i] + 1, sol[i] + n + 1);
            }
        }
        else
        {
            for(int i = 1; i < n; i += 2)
                swap(sol[i][1], sol[i+1][1]);
            for(int i = 1; i < n; i += 2)
                sort(sol[i] + 1, sol[i] + n + 1);
            swap(sol[1][n], sol[n][n]);
            sort(sol[n] + 1, sol[n] + n + 1);
        }
    }
}

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

int main()
{
    citire();
    rezolvare();
    afisare();
    return 0;
}