Cod sursa(job #231674)

Utilizator rss1987Marin Radu rss1987 Data 14 decembrie 2008 12:48:23
Problema Tablete Scor 100
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 1.41 kb
#include <stdio.h>
#define MAXN 1001

int N,K;
int tablete[MAXN][MAXN];
void read()
{
	scanf("%d %d",&N,&K);
}

void solve()
{
	int num = 0;
	if (K % 2 == 0)
	{
	   for(int col = 1;col+1 <= N; col+=2)
		   for(int lin=1; lin <= N;lin++)
		   {
			   tablete[lin-1][col-1] = ++num;
			   tablete[lin-1][col-1 + 1] = ++num;
		   }
       if (N % 2 == 1)
		   for(int lin=1; lin <=N;lin++)
			 tablete[lin-1][N-1] = ++num;
	}


	if (K%2 == 1)
	{
		int parMin = 2;
		int imparMin = 1;
		for(int lin=1;lin <= N; ++lin)
			for(int col = 1;col <=K;col++)
			{
				if (col < K)
				{
					if (parMin < imparMin)
					{
						tablete[lin-1][col-1] = parMin;
						parMin +=2;
					}
					else
					{
					 tablete[lin-1][col-1] = imparMin;
					 imparMin +=2;
					}
				}
				else
				{
					tablete[lin-1][col-1] = parMin;
					parMin +=2;
				}
			}

			for(int lin=1;lin <= N; ++lin)
			for(int col = K+1;col <=N;col++)
			{
				if (parMin < imparMin)
					{
						tablete[lin-1][col-1] = parMin;
						parMin +=2;
					}
				else
					{
					 tablete[lin-1][col-1] = imparMin;
					 imparMin +=2;
					}

			}
    }
}


void print()
{
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<N;j++)
			printf("%d ",tablete[i][j]);
		printf("\n");
	}
}
int main()
{
	freopen("tablete.in","r",stdin);
	freopen("tablete.out","w",stdout);
	read();
	solve();
	print();
	return 0;
}