Nu aveti permisiuni pentru a descarca fisierul grader_test7.in
Cod sursa(job #1796785)
Utilizator | Data | 3 noiembrie 2016 19:36:48 | |
---|---|---|---|
Problema | Fractal | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 8.6 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("fractal.in");
ofstream g("fractal.out");
int val;
void fract(int k, int x, int y, string directie)
{
if (!k)
g<<val;
else
{
if (directie == "sus1")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
fract(k-1, newx, newy, "stanga1");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "sus1");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "sus1");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta2");
}
}
else if (directie == "sus2")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "stanga2");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "sus2");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "sus2");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
//val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta1");
}
}
else if (directie == "stanga1")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
fract(k-1, newx, newy, "sus1");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += 3 * (1<<(2*k - 2));
fract(k-1, newx, newy, "jos2");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "stanga1");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "stanga1");
}
}
else if (directie == "stanga2")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
val += 3 * (1<<(2*k - 2));
fract(k-1, newx, newy, "sus2");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
//val += 3 * (1<<(2*k - 2));
fract(k-1, newx, newy, "jos1");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "stanga2");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += 2 * (1<<(2*k - 2));
fract(k-1, newx, newy, "stanga2");
}
}
else if (directie == "dreapta1")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta1");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta1");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "jos1");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
fract(k-1, newx, newy, "sus2");
}
}
else if (directie == "dreapta2")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
val += 2 * (1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta2");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += 1*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta2");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
//val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "jos2");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "sus1");
}
}
else if (directie == "jos1")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "jos1");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
fract(k-1, newx, newy, "stanga2");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta1");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += 2*(1<<(2*k - 2));
fract(k-1, newx, newy, "jos1");
}
}
else if (directie == "jos2")
{
int mijx = (1<<k)/2;
int mijy = mijx;
if (x <= mijx && y <= mijy)
{
int newx = x;
int newy = y;
val += 2 * (1<<(2*k - 2));
fract(k-1, newx, newy, "jos2");
}
if (x <= mijx && y > mijy)
{
int newx = x;
int newy = y - (1<<(k-1));
val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "stanga2");
}
if (x > mijx && y > mijy)
{
int newx = x - (1<<(k-1));
int newy = y - (1<<(k-1));
//val += 3*(1<<(2*k - 2));
fract(k-1, newx, newy, "dreapta1");
}
if (x > mijx && y <= mijy)
{
int newx = x - (1<<(k-1));
int newy = y;
val += (1<<(2*k - 2));
fract(k-1, newx, newy, "jos2");
}
}
}
}
int t;
int main()
{
int x, y;
f>>t>>x>>y;
fract(t,x,y,"sus1");
return 0;
}