Cod sursa(job #836979)

Utilizator sebii_cSebastian Claici sebii_c Data 16 decembrie 2012 23:07:20
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <cstdio>

#define MAXN 1001

int main()
{
    freopen("tablete.in", "r", stdin);
    freopen("tablete.out", "w", stdout);

    int n, k;
    scanf("%d %d", &n, &k);
    int a[MAXN][MAXN];
    if (k % 2 == 0) {
        int counter = 1;
        for (int i = 1; i <= n; ++i)
            for (int j = 1; j <= k; ++j)
                a[i][j] = counter++;
        for (int i = 1; i <= n; ++i)
            for (int j = k + 1; j <= n; ++j)
                a[i][j] = counter++;
    } else {
        if (n % 2 == 0) {
            int counter = 1;
            for (int i = 1; i <= n; i += 2) {
                for (int j = 1; j < k; ++j)
                    a[i][j] = counter++;
                a[i][k] = counter + 1;
                a[i + 1][1] = counter;
                counter += 2;
                for (int j = 2; j <= k; ++j)
                    a[i + 1][j] = counter++;
            }
            for (int i = 1; i <= n; ++i)
                for (int j = k + 1; j <= n; ++j)
                    a[i][j] = counter++;
        } else {
            int counter = 1;
            for (int i = 1; i < n; i += 2) {
                for (int j = 1; j < k; ++j)
                    a[i][j] = counter++;
                a[i][k] = counter + 1;
                a[i + 1][1] = counter;
                counter += 2;
                for (int j = 2; j <= k; ++j)
                    a[i + 1][j] = counter++;
            }
            int x = n * (n - 1);
            for (int j = 1; j <= n; ++j) 
                a[n][j] = x++;
            for (int i = 1; i < n; ++i)
                for (int j = k + 1; j <= n; ++j)
                    a[i][j] = counter++;
            a[n - 1][n] = n * n;

        }
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j)
            printf("%d ", a[i][j]);
        printf("\n");
    }

    return 0;
}