Cod sursa(job #231542)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 14 decembrie 2008 12:37:23
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 4.07 kb
#include <stdio.h>

using namespace std;

long v[1020][1020], n, i, j, k, l, p[1020];

int main()
{
    freopen("tablete.in", "r", stdin);
    freopen("tablete.out", "w", stdout);
    scanf("%d %d", &n, &k);
    if(n%2==0)
    {
        l=0;
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=n; j++)
            {
                l++;
                v[i][j]=l;
            }
        }
        if(k%2==1)
        {
            for(i=1; i<=n; i++)
            {
                if(i%2==1)
                {
                    for(j=0; j<n; j++)
                    {
                        v[i][j]=v[i][j+1];
                    }
                }
                else
                {
                    for(j=n+1; j>1; j--)
                    {
                        v[i][j]=v[i][j-1];
                    }
                }
            }
            for(i=1; i<=n; i++)
            {
                if(i%2==1)
                {
                    v[i][n]=v[i+1][n+1];
                }
                else
                {
                    v[i][1]=v[i-1][0];
                }
            }
        }
    }
    else
    {
        if(k%2==0)
        {
            l=0;
            for(i=1; i<=n; i++)
            {
                for(j=p[i]+1; j<=n; j++)
                {
                    l++;
                    if(j==k && l%2==1)
                    {
                        p[i+1]++;
                        v[i+1][1]=l;
                        l++;
                    }
                    v[i][j]=l;
                }
            }
        }
        else
        if(k%2==1)
        {
            l=0;
            for(i=1; i<=n; i++)
            {
                for(j=1; j<=n; j++)
                {
                    l++;
                    v[i][j]=l;
                }
            }
            if(n%4==3)
            {
                for(i=1; i<=n; i++)
                {
                    if(i%4==1)
                    {
                        for(j=0; j<n; j++)
                        {
                            v[i][j]=v[i][j+1];
                        }
                    }
                    else
                    if(i%4==3)
                    {
                        for(j=n+1; j>1; j--)
                        {
                            v[i][j]=v[i][j-1];
                        }
                    }
                }
                for(i=1; i<=n; i++)
                {
                    if(i%4==1)
                    {
                        v[i][n]=v[i+2][n+1];
                    }
                    if(i%4==3)
                    {
                        v[i][1]=v[i-2][0];
                    }
                }
            }
            else
            if(n%4==1)
            {
                for(i=1; i<n; i++)
                {
                    if(i%4==1)
                    {
                        for(j=0; j<n; j++)
                        {
                            v[i][j]=v[i][j+1];
                        }
                    }
                    else
                    if(i%4==3)
                    {
                        for(j=n+1; j>1; j--)
                        {
                            v[i][j]=v[i][j-1];
                        }
                    }
                }
                for(i=1; i<n; i++)
                {
                    if(i%4==1)
                    {
                        v[i][n]=v[i+2][n+1];
                    }
                    if(i%4==3)
                    {
                        v[i][1]=v[i-2][0];
                    }
                }
                for(j=n+1; j>1; j--)
                {
                    v[n][j]=v[n][j-1];
                }
                v[n][1]=v[n-2][n];
                v[n-2][n]=v[n][n+1];
            }
        }
                
    }
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
        printf("%d ", v[i][j]);
        printf("\n");
    }
    return 0;
}