Cod sursa(job #539014)

Utilizator marius21Petcu Marius marius21 Data 22 februarie 2011 10:40:53
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <cstdlib>

FILE *fin=fopen("fractal.in","r");
FILE *fout=fopen("fractal.out","w");

int len[32];

int main (int argc, char * const argv[]) {
	int x,y,k;
	fscanf(fin, "%d%d%d",&k,&x,&y);
	x--; y--;
	len[0]=0;
	for (int i=1; i<=k; i++)
		len[i]=len[i-1]*4+3;
	int sum = 0;
	int sgn = 1;
	while (k)
	{
		int lq = (x&(1<<(k-1)));
		int dq = (y&(1<<(k-1)));
		if (lq)
			x = (1<<k)-x-1;
		if (dq)
		{
			y-=(1<<(k-1));
		} else {
			int tmp = y;
			y = x;
			x = (1<<(k-1))-tmp-1;
		}
		if (!lq&&!dq)
		{
			sum+=sgn*(len[k-1]);
			sgn*=-1;
		}
		if (!lq&&dq)
			sum+=sgn*(len[k-1]+1);
		if (lq&&dq)
		{
			sum+=sgn*(len[k-1]*3+2);
			sgn*=-1;
		}
		if (lq&&!dq)
			sum+=sgn*(len[k-1]*3+3);
		k--;
	}
	fprintf(fout, "%d\n",sum);
	fclose(fin);
	fclose(fout);
    return 0;
}