Cod sursa(job #1699237)

Utilizator Belu99Bibo Bela Belu99 Data 6 mai 2016 19:11:31
Problema Fractal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.98 kb
#include <iostream>
#include <fstream>
using namespace std;
int x,y,s=0,k;
ofstream g("fractal.out");
void fract(int k,int ori)
{
    int a=1,i;
    if(k==0)
        g<<s;
    else
    {
        for(i=1;i<=k-1;i++)
            a=a*2;
        if(ori==1)
        {
            if(x<=a and y<=a)
                fract(k-1,2);
            else
                if(x<=a and y>a)
                {
                    s=s+(a*a-1)+1;
                    y=y-a;
                    fract(k-1,1);
                }
                else
                    if(x>a and y>a)
                    {
                        s=s+2*(a*a-1)+2;
                        x=x-a;
                        y=y-a;
                        fract(k-1,1);
                    }
                    else
                        if(x>a and y<=a)
                        {
                            s=s+3*(a*a-1)+3;
                            y=y-a;
                            fract(k-1,3);
                        }
        }
        else
            if(ori==2)
            {
                if(x<=a and y<=a)
                    fract(k-1,1);
                else
                    if(x>a and y<=a)
                    {
                        s=s+(a*a-1)+1;
                        x=x-a;
                        fract(k-1,2);
                    }
                    else
                        if(x>a and y>a)
                        {
                            s=s+2*(a*a-1)+2;
                            x=x-a;
                            y=y-a;
                            fract(k-1,2);
                        }
                        else
                            if(x<=a and y>a)
                            {
                                s=s+3*(a*a-1)+3;
                                y=y-a;
                                fract(k-1,4);
                            }
            }
            else
                if(ori==3)
                {
                    if(x>a and y>a)
                        fract(k-1,4);
                    else
                        if(x<=a and y>a)
                        {
                            s=s+(a*a-1)+1;
                            y=y-a;
                            fract(k-1,3);
                        }
                        else
                            if(x<a and y<a)
                            {
                                    s=s+2*(a*a-1)+2;
                                    fract(k-1,3);
                            }
                            else
                                if(x>a and y<=a)
                                {
                                    s=s+3*(a*a-1)+3;
                                    x=x-a;
                                    fract(k-1,1);
                                }
                }
                else
                    if(ori==4)
                    {
                        if(x>a and y>a)
                            fract(k-1,3);
                        else
                            if(x>a and y<=a)
                            {
                                s=s+(a*a-1)+1;
                                x=x-a;
                                fract(k-1,4);
                            }
                            else
                                if(x<=a and y<=a)
                                {
                                    s=s+2*(a*a-1)+2;
                                    fract(k-1,4);
                                }
                                else
                                    if(x<=a and y>a)
                                    {
                                        s=s+3*(a*a-1)+3;
                                        y=y-a;
                                        fract(k-1,2);
                                    }
                    }
    }
}
int main()
{
    ifstream f("fractal.in");
    f>>k;
    f>>x;
    f>>y;
    fract(k,1);
    return 0;
}