Cod sursa(job #997543)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 14 septembrie 2013 14:20:16
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <iostream>
#include <fstream>
#define NMax 1024

using namespace std;

int n, k;
int sol[NMax][NMax];
bool viz[NMax*NMax];

inline void Read()
{
    ifstream f ("tablete.in");
    f>>n>>k;
    f.close();
}

inline void Solve()
{
    if (k & 1)
    {
        /// k impar;
        int i, j, nr;
        nr = 0;
        for (i=1; i<=n; ++i)
        {
            for (j=1; j<=k; ++j)
                sol[i][j] = ++nr;
            if (i&1)
            {
                ++sol[i][k];
                ++i;
                if (i<=n)
                {
                    sol[i][1] = nr;
                    nr++;
                    for (j=2; j<=k; j++)
                        sol[i][j] = ++nr;
                }
            }
        }
        if (n&1)
        {
            sol[1][k+1] = nr;
            nr++;
            for (j=k+2; j<=n; ++j)
                sol[1][j] = ++nr;
            for (i=2; i<=n; ++i)
                for (j=k+1; j<=n; ++j)
                    sol[i][j] = ++nr;
        }
        else
        {
            for (i=1; i<=n; ++i)
                for (j=k+1; j<=n; ++j)
                    sol[i][j] = ++nr;
        }
    }
    else
    {
        int i, j, nr = 0;
        for (i=1; i<=n; ++i)
            for (j=1; j<=k; ++j)
                sol[i][j] = ++nr;
        for (i=1; i<=n; ++i)
            for (j=k+1; j<=n; ++j)
                sol[i][j] = ++nr;
    }
}

inline void Write()
{
    ofstream g("tablete.out");
    int i, j;
    for (i=1; i<=n; ++i)
    {
        for (j=1; j<=n; ++j)
            g<<sol[i][j]<<" ";
        g<<"\n";
    }
    g.close();
}

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}