Cod sursa(job #231161)

Utilizator ZalmodegikosC. Stefan Zalmodegikos Data 14 decembrie 2008 11:38:01
Problema Tablete Scor 20
Compilator cpp Status done
Runda Algoritmiada 2009, Runda 1, Studenti Marime 1.45 kb
#include <iostream>

int main()
{
	FILE* f = fopen("tablete.in", "r");

	int n, k;

	fscanf(f, "%d %d", &n, &k);
	fclose(f);

	int* viz = new int[n*n+1];
	memset(viz, 0, sizeof(int)*(n*n+1));

	int** tab = new int*[n];
	for (int i = 0; i < n; i++)
		tab[i] = new int[n];

	int trebin = k-1;

	int primloop = 1;
	int incepcop = 0;
	int lin = 0;
	int col = 0;
	int kcol = 0;
	int comp;
	int suntin;
	int trebini;

	for (int nr = 1; nr < n*n; nr++)
	{
		if (nr % 2 == 0)
		{	
			if (primloop == 1)
				comp = nr-1;
			else
				comp = suntin;

			if (comp >= trebin)
			{
				if (primloop)
					primloop = 0;
				
				tab[lin][k-1] = nr;
				viz[nr] = 1;
				
				suntin = 0;
				trebini = trebin;
				for (int i = nr-1; i > 0; i--)
				{				
					if (!viz[i])
					{
						if (trebini)
						{
							tab[lin][k-col-2] = i;
							viz[i] = 1;
							col++;
							
							trebini--;
						}
						else
							suntin++;
					}
				}
				lin++;
				col = 0;

				if (lin >= n)
					break;
			}
			
		}else if(!primloop)
				suntin++;
	}

	lin = 0;
	col = 0;
	for (int i = 1; i <= n*n; i++)
	{	
		if (!viz[i])
		{
			tab[lin][col+k] = i;
			col++;

			if (col+k >= n)
			{
				lin++;
				col = 0;
			}
		}
	}	
	
	f = fopen("tablete.out", "w+");

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			fprintf(f, "%d ", tab[i][j]);
		fprintf(f, "\n");
	}
	fclose(f);

	return 0;
}