Cod sursa(job #1692972)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 22 aprilie 2016 00:12:16
Problema Tablete Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <cstdio>
using namespace std;

#define dmax 1005

int d[dmax][dmax];

int N, K;

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

    int i, j;

    scanf("%d %d", &N, &K);

    if(K%2 == 0)
    {
        for(i = 1; i <= N; i++) d[i][K] = i * K;

        for(i = 1; i <= N; i++)
        {
            d[i][0] = d[i - 1][K];

            for(j = 1; j <= K - 1; j++) d[i][j] = d[i][j - 1] + 1;
        }

        int nr = N * K;

        for(i = 1; i <= N; i++)
            for(j = K + 1; j <= N; j++) d[i][j] = ++nr;
    }
    else
    {
        for(i = 1; i <= N; i++)
            if(i%2 == 1) d[i][K] = i * K + 1;
            else
                d[i][K] = i * K;

        /* COMPLETEZ COLOANA 1 */
        for(i = 1; i <= N; i++)
        {
            if(i%2 == 0) d[i][1] = d[i - 1][K] - 1;
            else
                d[i][1] = d[i - 1][K] + 1;
        }

        for(i = 1; i <= N; i++)
            for(j = 2; j <= K - 1; j++)
            {
                if(i%2 == 1) d[i][j] = d[i][j - 1] + 1;
                else
                {
                    if(j == 2) d[i][2] = 2 + d[i][1];
                    else
                        d[i][j] = d[i][j - 1] + 1;
                }
            }

        int nr = N * K;

        for(i = 1; i <= N; i++)
            for(j = K + 1; j <= N; j++) d[i][j] = ++nr;
    }

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

    return 0;
}