Cod sursa(job #1451840)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 18 iunie 2015 17:45:06
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("fractal.in");
ofstream fout("fractal.out");

int Solve(int K,int X,int Y)
{
    if (K == 1)
     {
         if (X == 1 && Y == 1) return 0;
        else
         if (X == 1 && Y == 2) return 1;
        else
         if (X == 2 && Y == 1) return 3;
        else  return 2;
     }

    K--;
    if (X <= (1 << K) && Y <= (1 << K))
    {
        swap(X,Y);
        return Solve(K,X,Y);
    }
    if (X <= (1 << K) && Y > (1 << K))
    {
        Y -= 1 << K;
        return (1 << (2 * K)) + Solve(K,X,Y);
    }
    if (X > (1 << K) && Y <= (1 << K))
    {
        X -= 1 << K;
        swap(X,Y);
        X = (1 << K) - X + 1;
        Y = (1 << K) - Y + 1;
        return 3*(1 << (2 * K)) + Solve(K,X,Y);
    }
    if (X > (1 << K) && Y > (1 << K))
    {
        X -= 1 << K;
        Y -= 1 << K;
        return 2*(1 << (2 * K)) + Solve(K,X,Y);
    }

}

int main()
{
    int X,Y,K;

     fin >> K >> X >> Y;

     fout << Solve(K,X,Y);

    return 0;
}