Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #define N 24
- int center;
- int centerSq;
- int splits = 1;
- bool filled(int x, int y) {
- return (x-center)*(x-center) + (y-center)*(y-center) <= centerSq;
- }
- void parse_range(int xLow, int xHigh, int yLow, int yHigh) {
- bool a,b,c,d;
- a = filled(xLow,yLow);
- b = filled(xLow,yHigh-1);
- c = filled(xHigh-1,yLow);
- d = filled(xHigh-1,yHigh-1);
- if (a && b && c && d || !(a || b || c || d)) {
- // printf("We did not need to split: (%d,%d) to (%d,%d)\n",xLow,yLow,xHigh,yHigh);
- return;
- }
- // printf("Splitting: (%d,%d) to (%d,%d)\n",xLow,yLow,xHigh,yHigh);
- splits++;
- int xMid = xLow + (xHigh - xLow) / 2;
- int yMid = yLow + (yHigh - yLow) / 2;
- parse_range(xLow,xMid,yLow,yMid);
- parse_range(xLow,xMid,yMid,yHigh);
- parse_range(xMid,xHigh,yLow,yMid);
- parse_range(xMid,xHigh,yMid,yHigh);
- }
- int main() {
- center = 1 << (N-1);
- centerSq = center * center;
- parse_range(0,1 << N-1,0,1 << N-1);
- parse_range(0,1 << N-1,1 << N-1,1 << N);
- parse_range(1 << N-1,1 << N,0,1 << N-1);
- parse_range(1 << N-1,1 << N,1 << N-1,1 << N);
- std::cout << splits;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement