Cod sursa(job #507647)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 6 decembrie 2010 15:43:00
Problema Oras Scor 5
Compilator cpp Status done
Runda selectie-vianu-2011 Marime 1.36 kb
#include <cstdio>

const int N = 201;

bool sol[N][N]; int n;

inline int inc(int a, int b)
{
	return (a+b)%n;
}

void inconjurare()
{
	for (int i = 0; i <= n-1; ++i)
		sol[inc(i,1)][inc(i,2)] = true;
}

void creare_sensuri()
{
	for (int k = 0; k <= n-1; ++k)
	{
		for (int i = 2; i <= (n-1)/2; ++i)
			if (i % 2 == 0)
				sol[inc(i,k)][k] = true;
			else
				sol[k][inc(i,k)] = true;
		for (int i = n-2; i >= (n+2)/2; --i)
			if (i % 2 == 0)
				sol[k][inc(i,k)] = true;
			else
				sol[inc(i,k)][k] = true;
		if (n % 2 == 0)
		{
			if (sol[k][inc(n/2+1,k)] == true)
				sol[inc(n/2,k)][k] = true;
			else
				sol[k][inc(n/2,k)] = true;
			sol[inc(n/2,k)][inc(n/2+1,k)] = false;
			sol[inc(n/2+1,k)][inc(n/2,k)] = true;
		}
	}
}

void afisare()
{
	for (int i = 1; i <= n-1; ++i)
	{
		for (int j = 1; j <= n-1; ++j)
			if (sol[i][j] == true)
				printf("1");
			else
				printf("0");
		if (sol[i][0] == true)
				printf("1");
			else
				printf("0");
		printf("\n");
	}	
	
	for (int j = 1; j <= n-1; ++j)
			if (sol[0][j] == true)
				printf("1");
			else
				printf("0");
		if (sol[0][0] == true)
				printf("1");
			else
				printf("0");
		printf("\n");
}

int main()
{
	freopen("oras.in","r",stdin);
	freopen("oras.out","w",stdout);
	scanf("%i",&n);
	inconjurare();
	creare_sensuri();
	afisare();
	return 0;
}