Cod sursa(job #2424919)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 23 mai 2019 23:23:48
Problema Fractal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

int szz[100];

int getpos(int r, int c, int k)
{
        //  cout<<k<<" : "<<r<<" "<<c<<"\n";
        if(k == 1)
        {
                if(r == 1 && c == 1)
                        return 1;
                if(r == 2 && c == 1)
                        return 2;
                if(r == 2 && c == 2)
                        return 3;
                if(r == 1 && c == 2)
                        return 4;
                return -1;
        }
        int sz = (1 << (k - 1));
        if(c <= sz)
        {
                if(r <= sz)
                {
                        return szz[k - 1] - getpos(c, sz + 1 - r, k - 1) + 1;
                }
                else
                {
                        return getpos(r - sz, c, k - 1) + szz[k - 1];
                }
        }
        else
        {
                if(r <= sz)
                {
                        return szz[k - 1] - getpos(2 * sz + 1 - c, r, k - 1) + 1 + 3 * szz[k - 1];
                }
                else
                {
                        return getpos(r - sz, c - sz, k - 1) + 2 * szz[k - 1];
                }
        }
}

int main()
{
        freopen("fractal.in", "r", stdin);
        freopen("fractal.out", "w", stdout);
        szz[1] = 4;
        for(int i = 2; i < 100; i++)
        {
                szz[i] = szz[i - 1] * 4;
        }
        int k, r, c;
        cin >> k >> r >> c;
        cout << getpos(c, r, k) - 1 << "\n";
        return 0;
}