Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool valid(int prev, int k, int after, int powerUsed) {
- if (k == 0 && powerUsed == 0)
- return true;
- if (powerUsed == 0)
- return false;
- // printf("call %d %d %d %d\n", prev, k, after, powerUsed);
- int toUse = pow(2, powerUsed - 1);
- if (toUse > k) {
- int shifted = toUse - k;
- vector<bool> vals;
- if (prev >= shifted) {
- vals.pb(
- valid(prev - shifted, shifted, after + k, powerUsed - 1));
- }
- if (after >= shifted) {
- vals.pb(
- valid(prev + k, shifted, after - shifted, powerUsed - 1));
- }
- for (auto x : vals)
- if (x)
- return true;
- return false;
- } else {
- return valid(prev + toUse, k - toUse, after, powerUsed - 1) || valid(prev, k - toUse, after + toUse, powerUsed - 1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement