Cod sursa(job #2831716)

Utilizator OrzaSERBANSerban Orza OrzaSERBAN Data 11 ianuarie 2022 22:04:35
Problema Fractal Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");

int n,m,nr;
int v[5];
int fir(int xSus,int ySus,int xJos,int yJos,int x,int y,int k)
{
    // 1 4
    // 2 3
    if(xSus==xJos)// 1 pe 1
        return 1;
    int mijX,mijY,z;
    z=(1<<(2*(k-1)));
    mijX=(xSus+xJos)/2;
    mijY=(ySus+yJos)/2;
    if(mijX<x)
    {
        if(mijY<y)
        {
            //3
            v[1]=1;
            v[2]=2;
            v[3]=3;
            v[4]=4;
            g<<k<<" "<<3<<'\n';
            return (v[3]-1)*z+fir(mijX+1,mijY+1,xJos,yJos,x,y,k-1);
        }
        else
        {
            //4;
            v[1]=3;
            v[2]=2;
            v[3]=1;
            v[4]=4;
            g<<k<<" "<<4<<'\n';
            return (v[4]-1)*z+fir(mijX+1,ySus,xJos,mijY,x,y,k-1);
        }
    }
    else
    {
        if(mijY<y)
        {
            //2
            v[1]=1;
            v[2]=2;
            v[3]=3;
            v[4]=4;
            g<<k<<" "<<2<<'\n';
            return (v[2]-1)*z+fir(xSus,mijY+1,mijX,yJos,x,y,k-1);
        }
        else
        {
            //1;
            v[1]=1;
            v[2]=4;
            v[3]=3;
            v[4]=2;
            g<<k<<" "<<1<<'\n';
            return (v[1]-1)*z+fir(xSus,ySus,mijX,mijY,x,y,k-1);
        }
    }

}
// 1 4
// 2 3
int sir(int k,int x,int y)
{
    int z=(1<<(k-1));
    if(k==1)
    {
        if(x==1 and y==2)
            return 2;
        return x+y-1;
    }
    if(z<x and z<y)//3
        return 2*z*z+sir(k-1,x,y);
    if(z<x and z>=y)//4
        return 3*z*z+sir(k-1,z-y+1,z-x+1);
    if(z>=x and z<y)//2
        return z*z+sir(k-1,x,y);
   // if(z>=x and z>=y)
        return sir(k-1,y,x);
}
int main()
{
    //ios_base::sync_with_stdio(0);
    //f.tie(0);
    //g.tie(0);
    int x,y,z;
    f>>n>>x>>y;
    v[1]=1;
    v[2]=2;
    v[3]=3;
    v[4]=4;
  //  swap(x,y);
   // g<<fir(1,1,(1<<n),(1<<n),x,y,n)-1;
    g<<sir(n,x,y)-1;
    return 0;
}