Cod sursa(job #997555)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 14 septembrie 2013 14:42:28
Problema Tablete Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.95 kb
#include <fstream>
#include <iostream>

#define ValMax 1000004
#define Nmax 1002
using namespace std;

bool use[ValMax];
int a[Nmax][Nmax];
int main()
{

    int i,j,value, x, n, k;
    ifstream f("tablete.in");
    f>>n>>k;
    f.close();
    if(k&1)
    {
        if(n&1)
        {
            value = 1;
            x = k;
            for(i = 1;i < n; i += 2)
            {
                value = (i+1)*k;
                for(j = k ;j >1; --j)
                {
                    a[i+1][j] = value;
                    use[value] = 1;
                    --value;
                }
                a[i][k] = i*k+1;
                a[i+1][1] = i*k;
                use[i*k] = use[i*k+1] = 1;
                for(j = k-1,value = i*k-1;j ; --j)
                {
                    if(use[value])
                        --value;
                    a[i][j] = value;
                    use[value] = 1;
                    --value;
                }
            }
            a[i][k] = a[i-1][k]+k+1;
            use[a[i][k]] = 1;
            value = 1;
            for(i = 1;i < n; ++i)
                for(j = k+1;j <= n; ++j)
                {
                    while(use[value])
                        ++value;
                    a[i][j] = value;
                    use[value] = 1;
                   ++value;
                }
            value = 1;
            for(j = 1;j <= n; ++j)
            {
                while(use[value])
                    ++value;
                a[i][j] = value++;
            }
        }
        else
        {
            value = 1;
            x = k;
            for(i = 1;i <= n; i += 2)
            {
                value = (i+1)*k;
                for(j = k ;j >1; --j)
                {
                    a[i+1][j] = value;
                    use[value] = 1;
                    --value;
                }
                a[i][k] = i*k+1;
                use[i*k] = use[i*k+1] = 1;
                a[i+1][1] = i*k;
                for(j = k-1,value = i*k-1;j ; --j)
                {
                    if(use[value])
                        --value;
                    a[i][j] = value;
                    use[value] = 1;
                    --value;
                }
            value = 1;
            for(i = 1;i <= n; ++i)
                for(j = k+1;j <= n; ++j)
                {
                    while(use[value])
                        ++value;
                    a[i][j] = value++;
                }
            }
        }
    }
    else
    {
        for(i = value = 1;i <= n; ++i)
            for(j = 1;j <= k; ++j)
                a[i][j] = value++;
         for(i = 1;i <= n; ++i)
            for(j = k+1;j <= n; ++j)
                a[i][j] = value++;
    }
    ofstream g("tablete.out");
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=n;++j)
            g<<a[i][j]<<" ";
        g<<"\n";
    }
    g.close();
    return 0;
}