Cod sursa(job #1676221)

Utilizator akaprosAna Kapros akapros Data 5 aprilie 2016 19:37:37
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.37 kb
#include <bits/stdc++.h>
#define maxN 1002
using namespace std;
int n, k, a[maxN][maxN];
bool w[maxN * maxN];
void read()
{
    freopen("tablete.in", "r", stdin);
    scanf("%d %d", &n, &k);
}
void solve()
{
    int i, j, val = 0;
    if (k % 2 == 0)
    {
        val = 0;
        for (i = 1; i <= n; ++ i)
            for (j = 1; j <= k; ++ j)
                a[i][j] = ++ val;
        for (i = 1; i <= n; ++ i)
            for (j = k + 1; j <= n; ++ j)
                a[i][j] = ++ val;
    }else
    {
        if (n % 2 == 0)
        {
            val = 0;
            for (i = 1; i <= n; ++ i)
            {
                for (j = 1; j < k; ++ j)
                {
                    if (w[val + 1])
                        ++ val;
                    a[i][j] = ++ val;
                    w[a[i][j]] = 1;
                }
                if (i % 2)
                   a[i][j] = val + 2;
                else
                    a[i][j] = ++ val;
                w[a[i][j]] = 1;
            }
        }else
        {
            for (i = 1; i < n; ++ i)
            {
                for (j = 1; j < k; ++ j)
                {
                    if (w[val + 1])
                        ++ val;
                    a[i][j] = ++ val;
                    w[a[i][j]] = 1;
                }
                if (i % 2)
                   a[i][j] = val + 2;
                else
                    a[i][j] = ++ val;
                w[a[i][j]] = 1;
            }
            for (i = 1; i <= k; ++ i)
                {
                    a[n][i] = (n - 1) * k + i;
                    w[a[n][i]] = 1;
                }
            w[a[n][k]] = 0;
            ++ a[n][k];
            w[a[n][k]] = 1;
            a[1][k + 1] = n * k;
            w[n * k] = 1;
        }
        for (i = 1; i <= n; ++ i)
                for (j = k + 1; j <= n; ++ j)
                    if (!a[i][j])
            {
                while (w[val + 1])
                    ++ val;
                a[i][j] = ++ val;
                    w[a[i][j]] = 1;
            }
    }
}
void write()
{
    freopen("tablete.out", "w", stdout);
    int i, j;
    for (i = 1; i <= n; ++ i)
    {
        for (j = 1; j <= n; ++ j)
            printf("%d ", a[i][j]);
        printf("\n");
    }
}
int main()
{
    read();
    solve();
    write();
    return 0;
}