Cod sursa(job #507683)

Utilizator AndreyPAndrei Poenaru AndreyP Data 6 decembrie 2010 16:34:23
Problema Oras Scor 10
Compilator cpp Status done
Runda selectie-vianu-2011 Marime 1.04 kb
#include <cstdio>
#define N 210

int n;
char a[N][N];

inline bool put3(int k) {
	while(k>1) {
		if(k%3==0) {
			k /= 3;
			continue;
		}
		return false;
	}
	return true;
}

void rezolva3(int pr,int ul) {
	if(pr==ul)
		return;
	int lun = (ul-pr+1)/3;
	int s1 = pr;
	int s2 = pr+lun;
	int s3 = s2+lun;
	
	for(int i=s1; i<s2; ++i) {
		for(int j=s2; j<s3; ++j)
			a[i][j] = '1';
	}
	
	for(int i=s2; i<s3; ++i) {
		for(int j=s3; j<=ul; ++j)
			a[i][j] = '1';
	}
	
	for(int i=s3; i<=ul; ++i) {
		for(int j=s1; j<s2; ++j)
			a[i][j] = '1';
	}
	
	rezolva3(s1,s2-1);
	rezolva3(s2,s3-1);
	rezolva3(s3,ul);
}

inline void scrie() {
	for(int i=1; i<=n; ++i) {
		for(int j=1; j<=n; ++j)
			fputc(a[i][j],stdout);
		fputc('\n',stdout);
	}
}

int main() {
	freopen("oras.in","r",stdin);
	freopen("oras.out","w",stdout);
	
	scanf("%d",&n);
	
	for(int i=1; i<=n; ++i) {
		for(int j=1; j<=n; ++j)
			a[i][j] = '0';
	}
	
	if(put3(n)) {
		rezolva3(1,n);
		scrie();
		return 0;
	}
	
	printf("-1\n");
	
	return 0;
}