Cod sursa(job #2069531)

Utilizator andreiudilaUdila Andrei andreiudila Data 18 noiembrie 2017 15:40:44
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
#include<cstring>
using namespace std;

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

int sol[16],i,j,n,k,x,y;

int calc(int n, int x, int y, int idx)
{

    if (n==2)
    {
        if (x==1 && y==1) return 0;
        else if (x==2 && y==1) return 1;
        else if (x==2 && y==2) return 2;
        else return 3;
    }

    int mid=n/2;

    if (x<=mid && y<=mid) return calc(n/2,y,x,idx-1);
    else if (x>mid && y<=mid) return sol[idx-1]+1+calc(n/2,x-mid,y,idx-1);
    else if (x>mid && y>mid) return sol[idx-1]*2+2+calc(n/2,x-mid,y-mid,idx-1);
    else
    {
        int newx=x;
        int newy=y-n/2;
        int newn=n/2;

        newy=newn-newy+1;
        newx=newn-newx+1;

        swap(newx,newy);

        return sol[idx-1]*3+3+calc(n/2,newx,newy,idx-1);
    }

}

int main()
{

    cin>>k>>y>>x;

    sol[1]=3;

    for (i=2; i<=k; ++i) sol[i]=4*sol[i-1]+3;

    cout<<calc((1<<k),x,y,k);

    return 0;
}