Cod sursa(job #2120016)

Utilizator TheNextGenerationAyy LMAO TheNextGeneration Data 1 februarie 2018 20:31:51
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <bits/stdc++.h>

using namespace std;

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

int rec(int i, int j, int k, int v)
{
    if (k == 0)
        return 0;
    else
    {
        int val = 1<<(k-1);
        if (v == 1)
        {
            if (i<=val)
            {
                if (j<=val)
                    return rec(i,j,k-1,2);
                else
                    return 3*val*val+rec(i,j-val,k-1,3);
            }
            else
            {
                if (j<=val)
                    return val*val+rec(i-val,j,k-1,1);
                else
                    return 2*val*val+rec(i-val,j-val,k-1,1);
            }
        }
        else if (v == 2)
        {
            if (i<=val)
            {
                if (j<=val)
                    return rec(i,j,k-1,1);
                else
                    return val*val+rec(i,j-val,k-1,2);
            }
            else
            {
                if (j<=val)
                    return 3*val*val+rec(i-val,j,k-1,4);
                else
                    return 2*val*val+rec(i-val,j-val,k-1,2);
            }
        }
        else if (v == 3)
        {
            if (i<=val)
            {
                if (j<=val)
                    return 2*val*val+rec(i,j,k-1,3);
                else
                    return 3*val*val+rec(i,j,k-1,1);
            }
            else
            {
                if (j<=val)
                    return val*val+rec(i-val,j,k-1,3);
                else
                    return rec(i-val,j-val,k-1,4);
            }
        }
        else
        {
            if (i<=val)
            {
                if (j<=val)
                    return 2*val*val+rec(i,j,k-1,4);
                else
                    return val*val+rec(i,j-val,k-1,4);
            }
            else
            {
                if (j<=val)
                    return 3*val*val+rec(i-val,j,k-1,2);
                else
                    return rec(i-val,j-val,k-1,3);
            }
        }
    }
}

int main()
{
    int k,i,j;
    in >> k >> j >> i;
    out << rec(i,j,k,1);
}