Cod sursa(job #2120016)
Utilizator | Data | 1 februarie 2018 20:31:51 | |
---|---|---|---|
Problema | Fractal | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.15 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("fractal.in");
ofstream out("fractal.out");
int rec(int i, int j, int k, int v)
{
if (k == 0)
return 0;
else
{
int val = 1<<(k-1);
if (v == 1)
{
if (i<=val)
{
if (j<=val)
return rec(i,j,k-1,2);
else
return 3*val*val+rec(i,j-val,k-1,3);
}
else
{
if (j<=val)
return val*val+rec(i-val,j,k-1,1);
else
return 2*val*val+rec(i-val,j-val,k-1,1);
}
}
else if (v == 2)
{
if (i<=val)
{
if (j<=val)
return rec(i,j,k-1,1);
else
return val*val+rec(i,j-val,k-1,2);
}
else
{
if (j<=val)
return 3*val*val+rec(i-val,j,k-1,4);
else
return 2*val*val+rec(i-val,j-val,k-1,2);
}
}
else if (v == 3)
{
if (i<=val)
{
if (j<=val)
return 2*val*val+rec(i,j,k-1,3);
else
return 3*val*val+rec(i,j,k-1,1);
}
else
{
if (j<=val)
return val*val+rec(i-val,j,k-1,3);
else
return rec(i-val,j-val,k-1,4);
}
}
else
{
if (i<=val)
{
if (j<=val)
return 2*val*val+rec(i,j,k-1,4);
else
return val*val+rec(i,j-val,k-1,4);
}
else
{
if (j<=val)
return 3*val*val+rec(i-val,j,k-1,2);
else
return rec(i-val,j-val,k-1,3);
}
}
}
}
int main()
{
int k,i,j;
in >> k >> j >> i;
out << rec(i,j,k,1);
}