Cod sursa(job #2251267)

Utilizator bori2000Fazakas Borbala bori2000 Data 1 octombrie 2018 12:41:56
Problema Fractal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <iostream>
#include <fstream>
using namespace std;

int l[15];

void feltolt_l(int i)
{
    l[i]=4*(l[i-1]+1)-1;
    if(i<15) feltolt_l(i+1);
}

int ketto_hatv(int x)
{
    int ered=1;
    for(int i=1; i<=x; i++) ered=ered*2;
    return ered;
}

int hanyadik(int i, int x, int y) //x=sor, y=osz
{
    int hatv=ketto_hatv(i-1);
    //cout<<"szint="<<i<<" koordinatak "<<x<<" "<<y<<" hatvany "<<hatv<<endl;

    if(i>1)
    {
        if(x<=hatv and y<=hatv)
        {
            //cout<<"szint="<<i<<" +0"<<endl;
            return hanyadik(i-1, y, x);
        }
        else if(x>hatv and y<=hatv)
        {
            //cout<<"szint="<<i<<" +"<<l[i-1]+1<<endl;
            return l[i-1]+1+hanyadik(i-1, x-hatv, y);
        }
        else if(x>hatv and y>hatv)
        {
            //cout<<"szint="<<i<<" +"<<2*l[i-1]+2<<endl;
            return 2*l[i-1]+2+hanyadik(i-1, x-hatv, y-hatv);
        }
        else
        {
            //cout<<"szint="<<i<<" +"<<3*l[i-1]+3<<endl;
            return 3*l[i-1]+3+hanyadik(i-1, 2*hatv-y+1, hatv-x+1);
        }
    }
    else
    {
        if(x==1 and y==1) return 0;
        else if(x==1 and y==2) return 3;
        else if(x==2 and y==1) return 1;
        else if(x==2 and y==2) return 2;
    }
}

int ered=0;

int main()
{
    ifstream f("fractal.in");
    ofstream g("fractal.out");
    l[0]=0;
    feltolt_l(1);
    //for(int i=1; i<=5; i++) cout<<l[i]<<endl;

    int l, sor, osz;
    f>>l>>osz>>sor;
    g<<hanyadik(l, sor, osz)<<endl;


    return 0;
}