Cod sursa(job #227025)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 3 decembrie 2008 14:44:48
Problema Tablete Scor Ascuns
Compilator cpp Status done
Runda Marime 1.08 kb
#include <cstdio>

using namespace std;

#define MAXN 1024

int N, K;
int m[MAXN][MAXN];

int main()
{
    freopen("tablete.in", "rt", stdin);
    freopen("tablete.out", "wt", stdout);

    scanf("%d %d", &N, &K);
    assert(3 <= N && N <= 1000);
    assert(1 < K && K < N);
    int k = 1, offset = 0;
    if (N % 2 == 1)
    {
        for (int i = 0; i < N; i++)
            m[i][0] = k++;
        offset = 1;
    }

    int skipped = -1;
    for (int i = 0; i < N; i++)
        for (int j = offset; j < N; j++)
        {
            if (skipped != -1 && skipped > m[i][j - 1])
            {
                m[i][j] = skipped;
                skipped = -1;
                continue;
            }

            if (k % 2 && j == K - 1)
                skipped = k++;
            if (K % 2 && i == N - 2 && j == N - 1)
            {
                m[i][j] = N * N;
                continue;
            }
            m[i][j] = k++;
        }

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
            printf("%4d ", m[i][j]);
        printf("\n");
    }

    return 0;
}