Cod sursa(job #1481175)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 3 septembrie 2015 22:55:35
Problema Fractal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <iostream>
using namespace std;

int mat[5][3][3],v[16],p[16];
int k,x,y,i,c=1,sol;

void atr(int m[5][3][3],int v[16],int p[16])
{
    m[1][1][1]=m[2][1][1]=m[3][1][1]=m[4][2][2]= 1;
    m[1][1][2]=m[2][2][1]=m[3][2][1]=m[4][2][1]= 2;
    m[1][2][2]=m[2][2][2]=m[3][2][2]=m[4][1][1]= 3;
    m[1][2][1]=m[2][1][2]=m[3][1][2]=m[4][1][2]= 4;
    v[1]=3;
    p[0]=1;p[1]=2;
    for(i=2;i<16;i++)
        v[i]=v[i-1]*4+3,
        p[i]=p[i-1]*2;
    v[1]=4;
}

int cadr(int k,int x,int y)
{
    if( x<p[k-1] && y<p[k-1] )
        return 1;
    if( x<p[k-1] && y>p[k-1] )
        return 2;
    if( y<p[k-1] )
        return 3;
    return 4;
}

int solve(int k,int x,int y)
{
    while(k>1)
    {
        c=cadr(k,x,y);
        k--;
        sol+=(c-1)*v[k];
        if(c==2)
            y-=p[k];
        else if(c==3)
            x-=p[k],
            y-=p[k];
        else if(c==4)
            x-=p[k];
    }
    return sol+mat[c][x][y];

}

int main()
{
    ifstream f1("fractal.in");
    ofstream f2("fractal.out");
    f1>>k>>x>>y;
    atr(mat,v,p);
    f2<<solve(k,x,y)+1;
    return 0;
}