Cod sursa(job #1362851)

Utilizator avaspAva Spataru avasp Data 26 februarie 2015 16:02:24
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include<cstdio>
using namespace std;
int n,k,a[1001][1001],nr,li,lp;
int main(){
    freopen("tablete.in","r",stdin);
    freopen("tablete.out","w",stdout);
    scanf("%d%d",&n,&k);
    nr=n*n;
    if(n%2==1&&k%2==1){
        for(int i=n;i>1;i-=2)
            for(int j=n;j>k;j-=2){
                a[i][j]=nr;nr--;
                a[i-1][j]=nr;nr--;
                a[i][j-1]=nr;nr--;
                a[i-1][j-1]=nr;nr--;
            }
        lp=n;
        for(int j=n;j>k;j--){
            a[1][j]=nr;nr--;
            a[lp][k]=nr;nr--;
            lp--;
        }
        li=n;
        while(lp>=1){
            a[li][k-1]=nr;nr--;li--;
            a[lp][k]=nr;nr--;lp--;
        }
        while(li>=1){
            a[li][k-1]=nr;nr--;li--;
        }
        for(int j=k-2;j>=1;j--)
            for(int i=n;i>=1;i--){
                a[i][j]=nr;nr--;
            }
    }
    if(n%2==1&&k%2==0){
        nr=1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=k;j++){
                a[i][j]=nr;nr++;
            }
        for(int i=1;i<=n;i++)
            for(int j=k+1;j<=n;j++){
                a[i][j]=nr;nr++;
            }
    }
    if(n%2==0){
        nr=n*n;
        for(int i=n;i>=1;i--)
            for(int j=n;j>k;j--){
                a[i][j]=nr;nr--;
            }
        if(nr%2==0)
            for(int i=n;i>=1;i--){
                a[i][k]=nr;nr--;
                a[i][k-1]=nr;nr--;
            }
        if(nr%2==1)
            for(int i=n;i>=1;i--){
                a[i][k-1]=nr;nr--;
                a[i][k]=nr;nr--;
            }
        if(nr>=1){
            for(int i=n;i>=1;i--)
                for(int j=k-2;j>=1;j--){
                    a[i][j]=nr;nr--;
                }
        }
    }

     for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    return 0;
}