Cod sursa(job #1796530)

Utilizator FodosagSera Victor Fodosag Data 3 noiembrie 2016 16:11:37
Problema Fractal Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.36 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("fractal.in");
ofstream g("fractal.out");

int val;

void fract(int k, int x, int y, string directie)
{
    if (!k)
        g<<val;
    else
    {
        if (directie == "sus")
        {
            int mijx = (1<<k)/2;
            int mijy = mijx;
            if (x <= mijx && y <= mijy)
            {
                int newx = x;
                int newy = y;
                fract(k-1, newx, newy, "stanga");
            }
            if (x <= mijx && y > mijy)
            {
                int newx = x;
                int newy = y - (1<<(k-1));
                val += (1<<(2*k - 2));
                fract(k-1, newx, newy, "sus");
            }
            if (x > mijx && y > mijy)
            {
                int newx = x - (1<<(k-1));
                int newy = y - (1<<(k-1));
                val += 2*(1<<(2*k - 2));
                fract(k-1, newx, newy, "sus");
            }
            if (x > mijx && y <= mijy)
            {
                int newx = x - (1<<(k-1));
                int newy = y;
                val += 3*(1<<(2*k - 2));
                fract(k-1, newx, newy, "dreapta");
            }
        }
        else if (directie  == "stanga")
        {
            int mijx = (1<<k)/2;
            int mijy = mijx;
            if (x <= mijx && y <= mijy)
            {
                int newx = x;
                int newy = y;
                fract(k-1, newx, newy, "sus");
            }
            if (x <= mijx && y > mijy)
            {
                int newx = x;
                int newy = y - (1<<(k-1));
                val += 3 * (1<<(2*k - 2));
                fract(k-1, newx, newy, "jos");
            }
            if (x > mijx && y > mijy)
            {
                int newx = x - (1<<(k-1));
                int newy = y - (1<<(k-1));
                val += 2*(1<<(2*k - 2));
                fract(k-1, newx, newy, "stanga");
            }
            if (x > mijx && y <= mijy)
            {
                int newx = x - (1<<(k-1));
                int newy = y;
                val += (1<<(2*k - 2));
                fract(k-1, newx, newy, "stanga");
            }
        }
        else if (directie == "dreapta")
        {
            int mijx = (1<<k)/2;
            int mijy = mijx;
            if (x <= mijx && y <= mijy)
            {
                int newx = x;
                int newy = y;
                val += (1<<(2*k - 2));
                fract(k-1, newx, newy, "dreapta");
            }
            if (x <= mijx && y > mijy)
            {
                int newx = x;
                int newy = y - (1<<(k-1));
                val += 2*(1<<(2*k - 2));
                fract(k-1, newx, newy, "dreapta");
            }
            if (x > mijx && y > mijy)
            {
                int newx = x - (1<<(k-1));
                int newy = y - (1<<(k-1));
                val += 3*(1<<(2*k - 2));
                fract(k-1, newx, newy, "jos");
            }
            if (x > mijx && y <= mijy)
            {
                int newx = x - (1<<(k-1));
                int newy = y;
                fract(k-1, newx, newy, "sus");
            }
        }
        else if (directie == "jos")
        {
            int mijx = (1<<k)/2;
            int mijy = mijx;
            if (x <= mijx && y <= mijy)
            {
                int newx = x;
                int newy = y;
                val += (1<<(2*k - 2));
                fract(k-1, newx, newy, "jos");
            }
            if (x <= mijx && y > mijy)
            {
                int newx = x;
                int newy = y - (1<<(k-1));
                fract(k-1, newx, newy, "stanga");
            }
            if (x > mijx && y > mijy)
            {
                int newx = x - (1<<(k-1));
                int newy = y - (1<<(k-1));
                val += 3*(1<<(2*k - 2));
                fract(k-1, newx, newy, "dreapta");
            }
            if (x > mijx && y <= mijy)
            {
                int newx = x - (1<<(k-1));
                int newy = y;
                val += 2*(1<<(2*k - 2));
                fract(k-1, newx, newy, "jos");
            }
        }
    }
}

int t;

int main()
{
    int x, y;
    f>>t>>y>>x;
    fract(t,x,y,"sus");


    return 0;
}