Cod sursa(job #2078854)

Utilizator shantih1Alex S Hill shantih1 Data 30 noiembrie 2017 09:01:44
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("fractal.in");
ofstream fout("fractal.out");

int n, i, j, l, c, k, val;

int divide (int sum, int val, int o, int l2, int c2)
{
	if (val == 0)	return sum;
	if (val >= 1)
	{
		int ad = val*val;
		val /= 2;
		
		if (o == 1)
		{
			if (l <= l2 && c <= c2)	sum = divide(sum, val, 4, l2-val, c2-val);
			if (l <= l2 && c > c2)	sum = divide(sum+ad, val, 1, l2-val, c2+val);
			if (l > l2 && c > c2)	sum = divide(sum+2*ad, val, 1, l2+val, c2+val);
			if (l > l2 && c <= c2)	sum = divide(sum+3*ad, val, 2, l2+val, c2-val);
		}
		if (o == 2)
		{
			if (l <= l2 && c <= c2)	sum = divide(sum+2*ad, val, 2, l2-val, c2-val);
			if (l <= l2 && c > c2)	sum = divide(sum+ad, val, 2, l2-val, c2+val);
			if (l > l2 && c > c2)	sum = divide(sum, val, 3, l2+val, c2+val);
			if (l > l2 && c <= c2)	sum = divide(sum+3*ad, val, 1, l2+val, c2-val);
		}
		if (o == 3)
		{
			if (l <= l2 && c <= c2)	sum = divide(sum+2*ad, val, 3, l2-val, c2-val);
			if (l <= l2 && c > c2)	sum = divide(sum+3*ad, val, 4, l2-val, c2+val);
			if (l > l2 && c > c2)	sum = divide(sum, val, 2, l2+val, c2+val);
			if (l > l2 && c <= c2)	sum = divide(sum+ad, val, 3, l2+val, c2-val);
		}
		if (o == 4)
		{
			if (l <= l2 && c <= c2)	sum = divide(sum, val, 1, l2-val, c2-val);
			if (l <= l2 && c > c2)	sum = divide(sum+3*ad, val, 3, l2-val, c2+val);
			if (l > l2 && c > c2)	sum = divide(sum+2*ad, val, 4, l2+val, c2+val);
			if (l > l2 && c <= c2)	sum = divide(sum+ad, val, 4, l2+val, c2-val);
		}
	}
	return sum;
}

int main () {
	
	fin >> k >> c >> l;
	val = 1;
	for (i = 1; i < k; i++)
		val *= 2;
	
	fout << divide (0, val, 4, val, val);
}