Pagini recente » Cod sursa (job #2936342) | Cod sursa (job #250589) | Cod sursa (job #2886394) | Cod sursa (job #846284) | Cod sursa (job #685651)
Cod sursa(job #685651)
#include <fstream>
int getResult(int,int,int);
int main()
{
int K,x,y;
std::ifstream("fractal.in") >> K >> x >> y;
std::ofstream("fractal.out") << getResult(K,y,x);
return 0;
}
inline int pow2(int K) { return 1 << K ; }
int getResult(int K,int l,int c)
{
if(K == 0)
return 0;
else
{
if( l >= 1 && l <= pow2(K - 1) && c >=1 && c <= pow2(K - 1) ) //stanga sus,simetrie diag princ
return 0 + getResult(K - 1,c,l);
if( l > pow2(K - 1) && l <= pow2(K) && c > pow2(K - 1) && c <= pow2(K) ) //dreapta jos
return 2 + 2 * (pow2(K - 1)*pow2(K - 1) - 1) + getResult(K - 1,l - pow2(K - 1), c - pow2(K - 1) );
if( l >= 1 && l <= pow2(K - 1) && c > pow2(K - 1) && c <= pow2(K) ) //dreapta sus, simetrie diag sec
{
int _l = l, _c = c - pow2(K - 1);
return 3 + 3 * (pow2(K - 1)*pow2(K - 1) - 1) + getResult(K - 1, _l + _c == pow2(K - 1) + 1 ? _l : pow2(K - 1) - _l + 1,_l + _c == pow2(K - 1) + 1 ? _c : pow2(K - 1) - _c + 1 );
}
if( l > pow2(K - 1) && l <= pow2(K) && c >=1 && c <= pow2(K - 1) ) //stanga jos
return 1 + pow2(K - 1)*pow2(K - 1) - 1 + getResult(K - 1,l - pow2(K - 1),c);
return 0;
}
}