Mai intai trebuie sa te autentifici.
Cod sursa(job #2485096)
| Utilizator | Data | 31 octombrie 2019 23:03:39 | |
|---|---|---|---|
| Problema | Fractal | Scor | 50 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.94 kb |
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream in("fractal.in");
ofstream out("fractal.out");
int k, x, y;
ll pw[123];
ll solve(int k, int x, int y) {
if (k == 1) {
if (x == 1 && y == 1)
return 0;
if (x == 2 && y == 1)
return 1;
if (x == 1 && y == 2)
return 3;
return 2;
}
int lat = pw[k - 1];
if (x <= lat && y <= lat)
return solve(k - 1, y, x);
if (x > lat && y <= lat)
return lat * lat + solve(k - 1, x - lat, y);
if (x > lat && y > lat)
return 2 * lat * lat + solve(k - 1, x - lat, y - lat);
if (x <= lat && y >= lat)
return 3 * lat * lat + solve(k - 1, 2 * lat - y + 1, lat - x - 1);
return -1;
}
int main() {
pw[0] = 1;
for (int i = 1; i <= 30; i++)
pw[i] = 2 * pw[i - 1];
in >> k >> y >> x;
out << solve(k, x, y);
return 0;
}