Cod sursa(job #870537)

Utilizator ericptsStavarache Petru Eric ericpts Data 3 februarie 2013 16:02:38
Problema Tablete Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <cstdio>

using namespace std;

int mat[1001][1001];
int n,k;

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

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

    scanf("%d %d\n",&n,&k);


    if(~n&1)
    {
        if(~k&1)
         {
            for(i=1;i<=n;++i)
                for(j=1;j<=n;++j)
                    mat[i][j] = (i-1)*n + j;
        }

        else
        {
            mat[1][1] = 1;
            mat[2][1] = k;
            for(j=2;j<=n;++j)
            {
                mat[1][j] = mat[1][j-1] + 1;
                if(j == k)
                    mat[1][j]++;
            }
            for(j=2;j<=n;++j)
                mat[2][j] = mat[1][j]+n;
            for(i=3;i<=n;++i)
                for(j=1;j<=n;++j)
                    mat[i][j] = mat[i-1][j]+n;
            for(i=k;i<=n;++i)
                mat[n][i]-=2;
            mat[n-1][n] = mat[n][n]+1;
            for(i=k-1;i>1;--i)
                mat[n][i]--;
        }
    }
    else
    {
        if(~k&1)
        {
            for(i=1;i<=n;++i)
                for(j=1;j<=n;++j)
                    mat[i][j] = (i-1)*n + j;
            for(i=2;i<=n;i+=2)
            {
                mat[i-1][n] = mat[i][k];
                mat[i][k] = mat[i][k-1];
                for(j=k-1;j>1;--j)
                    mat[i][j] = mat[i][j-1];
                mat[i][j]--;
            }
        }
        else
        {
            for(i=1;i<=n;++i)
                for(j=1;j<=n;++j)
                    mat[i][j] = (i-1)*n + j;
            for(i=1;i<=n;i+=2)
            {
                for(j=k;j<n;++j)
                    mat[i][j]=mat[i][j+1];
                mat[i][j]++;
                mat[i+1][1] = mat[i][k];
            }
            for(i=1;i<=n;++i)
                mat[n][i]--;
            mat[n][k] --;
            mat[n-1][n]=mat[n][k]+1;
        }
    }
    show();
    return 0;
}