Cod sursa(job #1058861)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 15 decembrie 2013 22:02:54
Problema Tablete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<cstdio>
using namespace std;
int N,K,i,j,k;
int M[1005][1005];
int main()
{
    freopen("tablete.in","r",stdin);
    freopen("tablete.out","w",stdout);
    scanf("%d%d",&N,&K);
    //K par
    if(K%2==0)
    {
        for(k=1,i=1;i<=N;i++)
            for(j=1;j<=N;j++,k++)
                M[i][j]=k;
    }
    //K impar si N par
    if(K%2==1 && N%2==0)
    {
        k=1;
        for(i=1;i<=N;i++)
        {
            for(j=1;j<=K-1;j++,k++)
                M[i][j]=k;
            M[i][K]=k+1;
            i++;
            M[i][1]=k;
            k+=2;
            for(j=2;j<=K;j++,k++)
                M[i][j]=k;
        }
        for(i=1;i<=N;i++)
            for(j=K+1;j<=N;j++,k++)
                M[i][j]=k;
    }
    //K impar si N impar
    if(K%2==1 && N%2==1)
    {
        k=1;
        for(i=1;i<=N;i++)
        {
            for(j=1;j<=K-1;j++,k++)
                M[i][j]=k;
            M[i][K]=k+1;
            i++;
            if(i==N) break;
            M[i][1]=k;
            k+=2;
            for(j=2;j<=K;j++,k++)
                M[i][j]=k;
        }
        for(j=1;j<=K-1;j++)
            M[N][j]=(N-1)*K+j;
        M[N][K]=N*K+1;
        M[1][K+1]=N*K;
        k=N*K+2;
        for(i=1;i<=N;i++)
            for(j=K+1;j<=N;j++,k++)
                M[i][j]=k;
    }
    //Afisare
    for(i=1;i<=N;i++,printf("\n"))
        for(j=1;j<=N;j++)
            printf("%d ",M[i][j]);
    return 0;
}