Cod sursa(job #231091)

Utilizator blasterzMircea Dima blasterz Data 14 decembrie 2008 11:29:08
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Clasele 5-8 Marime 1.2 kb
#include <cstdio>

int a[1001][1001];
bool use[1000001];

int n, K;

void solve1() // n=par K=par
{

    int i, j, k=0;

    for(i=1;i<=n;++i)
	for(j=1;j<=n;++j) a[i][j]=++k;
}

void solve2() // n=par/impar, K=impar
{
    int i, j, k,N=n*n;

    a[1][K]=K+1;
    use[a[1][K]]=1;

    for(i=2;i<=n;++i)
	if(i%2) a[i][K]=a[i-1][K]+K-1, use[a[i][K]]=1;
	else a[i][K]=a[i-1][K]+K+1, use[a[i][K]]=1;

     k=0;

    for(i=1;i<=n;++i)
	for(j=1;j<=K;++j)
	    if(!a[i][j])
	    {
		++k;
		while(use[k] && k<=N) ++k;
		a[i][j]=k;
	    }


    for(i=1;i<=n;++i)
	for(j=K+1;j<=n;++j)
	    if(!a[i][j])
	    {
		++k;
		while(use[k] && k<=N) ++k;
		a[i][j]=k;
	    }

}


void solve3() // n=impar, K=par
{
    int i, j, k=0;
    
    for(i=1;i<=n;++i)
	for(j=1;j<=K;++j) a[i][j]=++k;

    for(i=1;i<=n;++i)
	for(j=K+1;j<=n;++j) a[i][j]=++k;

}
int main()
{
    freopen("tablete.in","r",stdin);
    freopen("tablete.out","w",stdout);
    scanf("%d %d\n", &n, &K);

    if((n%2 == 0) && (K%2 == 0) ) solve1();
    if((n%2 == 0) && (K%2)) solve2();
    if((n%2) && (K%2)) solve2();
    if((n%2) && (K%2 ==0)) solve3();
    int i, j;

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

    return 0;
}