Mai intai trebuie sa te autentifici.
Cod sursa(job #831490)
Utilizator | Data | 8 decembrie 2012 18:10:06 | |
---|---|---|---|
Problema | Fractal | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.02 kb |
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
long long a,b,c,rez,i;
long long powy(long long t,long long p)
{
long long e=1;
for (i=1;i<=p;i++)
e*=t;
return e;
}
long long fract(long long k,long long x, long long y)
{
int cadr;
if (k==0)
return rez;
else
{
if (x<=powy(2,k-1) && y<=powy(2,k-1))
cadr=1;
else if (x>powy(2,k-1) && y<=powy(2,k-1))
cadr=2;
else if (x>powy(2,k-1) && y>powy(2,k-1))
cadr=3;
else if (x<=powy(2,k-1) && y>powy(2,k-1))
cadr=4;
if (cadr==1)
return fract(k-1,y,powy(2,k-1)-(powy(2,k-1)-x+1)+1);
if (cadr==2)
{
rez+=powy(4,k-1);
return fract(k-1,x-powy(2,k-1),y);
}
if (cadr==3)
{
rez+=2*powy(4,k-1);
return fract(k-1,x-powy(2,k-1),y-powy(2,k-1));
}
if (cadr==4)
{
rez+=3*powy(4,k-1);
return fract(k-1,powy(2,k-1)-(y-powy(2,k-1))+1,powy(2,k-1)-x+1);
}
}
}
int main ()
{
f>>a>>c>>b;
g<<fract(a,b,c);
return 0;
}