Cod sursa(job #2897606)

Utilizator AswVwsACamburu Luca AswVwsA Data 4 mai 2022 10:40:15
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <fstream>
using namespace std;

int f(int k, int lin, int col, int ok)
{
    if (k == 0)
        return 0;
    int lat = (1 << (k - 1));
    int nr = (1 << (2 * (k - 1)));
    if (ok == 1) //original
    {
        if (lin <= lat and col <= lat) //1
            return f(k - 1, lin, col, 3);
        if (lin > lat and col <= lat)//2
            return f(k - 1, lin - lat, col, 1) + nr;
        if (lin > lat and col > lat)//3
            return f(k - 1, lin - lat, col - lat, 1) + 2 * nr;
        return f(k - 1, lin, col - lat, 2) + 3 * nr; //4
    }
    else if (ok == 2) //orientat spre dreapta
    {
        //3, 2, 1, 4
        if (lin > lat and col > lat)//3
            return f(k - 1, lin - lat, col - lat, 4);
        if (lin > lat and col <= lat)//2
            return f(k - 1, lin - lat, col, 2) + nr;
        if (lin <= lat and col <= lat) //1
            return f(k - 1, lin, col, 2) + 2 * nr;
        return f(k - 1, lin, col - lat, 1) + 3 * nr;
    }
    else if (ok == 3) //orientat spre stanga
    {
        //1, 4, 3, 2
        if (lin <= lat and col <= lat) //1
            return f(k - 1, lin, col, 1);
        if (lin <= lat and col > lat)//4
            return (k - 1, lin, col - lat, 3) + nr;
        if (lin > lat and col > lat)//3
            return f(k - 1, lin - lat, col - lat, 3) + 2 * nr;
        return f(k - 1, lin - lat, col, 4) + 3 * nr;
    }
    else  //orientat in jos
    {
        //3, 4, 1, 2
        if (lin > lat and col > lat)//3
            return f(k - 1, lin - lat, col - lat, 2);
        if (lin <= lat and col > lat)//4
            return f(k - 1, lin, col - lat, 4) + nr;
        if (lin <= lat and col <= lat) //1
            return f(k - 1, lin, col, 4) + 2 * nr;
        return f(k - 1, lin - lat, col, 3) + 3 * nr;
    }
}
int main()
{
    ifstream cin("fractal.in");
    ofstream cout("fractal.out");
    int k, x, y;
    cin >> k >> y >> x;
    cout << f(k, x, y, 1);
}