Cod sursa(job #605133)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 26 iulie 2011 20:33:12
Problema Tablete Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 kb
# include <fstream>
using namespace std;

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

int n, k;
int a[1004][1004];

void p1 ()
{
    int nr = 0;
    if (k % 2 == 0)
    {
        for (int i = 1; i <= n; ++i)
            for (int j = 1; j <= k; ++j)
                a[i][j] = ++nr;
        for (int i = 1; i <= n; ++i)
            for (int j = k + 1; j <= n; ++j)
                a[i][j] = ++nr;
    }
}

void p2 ()
{
    int nr = -1, var = k * 2 - 2;
    if (k % 2 == 1 && n % 2 == 0)
    {
        for (int i = 1; i <= n; )
        {
            for (int j = 1; j < k; ++j)
                a[i][j] = (nr += 2);
            a[i][k] = ++nr;
            int vnr = nr;
            nr -= var;
            ++i;
            for (int j = 1; j < k - 1; ++j)
                a[i][j] = (nr += 2);
            a[i][k - 1] = ++vnr;
            a[i][k] = ++vnr;
            nr = vnr - 1;
            ++i;
        }
        ++nr;
        for (int i = 1; i <= n; ++i)
            for (int j = k + 1; j <= n; ++j)
                a[i][j] = ++nr;
    }
}
void p3 ()
{
    int nr = -1, var = k * 2 - 2;
    if (k % 2 == 1 && n % 2 == 1)
    {
        for (int i = 1; i < n; )
        {
            for (int j = 1; j < k; ++j)
                a[i][j] = (nr += 2);
            a[i][k] = ++nr;
            int vnr = nr;
            nr -= var;
            ++i;
            for (int j = 1; j < k - 1; ++j)
                a[i][j] = (nr += 2);
            a[i][k - 1] = ++vnr;
            a[i][k] = ++vnr;
            nr = vnr - 1;
            ++i;
        }
        //++nr;
        for (int j = 1; j < k; ++j)
            a[n][j] = ++nr;
        a[n][k] = (nr += 2);
        a[1][k + 1] = --nr;
        a[1][k + 2] = (nr += 2);
        for (int j = k + 3; j <= n; ++j)
            a[1][j] = ++nr;
        for (int i = 2; i <= n; ++i)
            for (int j = k + 1; j <= n; ++j)
                a[i][j] = ++nr;
    }
}
int main ()
{
    f >> n >> k;
    p1 ();
    p2 ();
    p3 ();
    for (int i = 1; i <= n; ++i, g << '\n')
        for (int j = 1; j <= n; ++j)
            g << a[i][j] << ' ';

    g.close ();
    return 0;
}