Cod sursa(job #2256528)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 8 octombrie 2018 19:18:42
Problema Tablete Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.45 kb
#include <fstream>

using namespace std;

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

int a[1005][1005], n, k, lin, col;

bool b[1000005];

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

    if (k % 2 == 0)
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= k; j++)
            {
                b[(i - 1) * k + j] = true;
                a[i][j] = (i - 1) * k + j;
            }
        }
    }
    else
    {
        if (n % 2 == 0)
        {
            for (int i = 1; i <= n - 1; i += 2)
            {
                int val = (i - 1) * k;
                for (int j = 1; j <= k - 1; j++)
                {
                    val++;
                    b[val] = true;
                    a[i][j] = val;
                }

                a[i][k] = val + 2;
                b[val + 2] = true;
                b[val + 1] = true;
                a[i + 1][1] = val + 1;
                val = val + 2;
                for (int j = 2; j <= k; j++)
                {
                    val++;
                    b[val] = true;
                    a[i + 1][j] = val;
                }
            }
        }
        else
        {
            for (int i = 1; i <= n - 1; i += 2)
            {
                int val = (i - 1) * k;
                for (int j = 1; j <= k - 1; j++)
                {
                    val++;
                    b[val] = true;
                    a[i][j] = val;
                }

                a[i][k] = val + 2;
                b[val + 2] = true;
                b[val + 1] = true;
                a[i + 1][1] = val + 1;
                val = val + 2;
                for (int j = 2; j <= k; j++)
                {
                    val++;
                    b[val] = true;
                }
            }

            for (int i = 1; i <= k; i++)
            {
                b[(n - 1) * k + i] = true;
                a[n][i] = (n - 1) * k + i;
            }
        }
    }

    lin = 1;
    col = k + 1;

    for (int val = 1; val <= n * n; val++)
    {
        if (b[val] == false)
        {
            a[lin][col] = val;
            col++;
            if (col == n + 1)
            {
                col = k + 1;
                lin++;
            }
        }
    }

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
            g << a[i][j] << " ";

        g << '\n';
    }
    return 0;
}