#include using namespace std; const int MAXSIZE = 128; int grid[MAXSIZE][MAXSIZE]; int quad[2*MAXSIZE*MAXSIZE]; int squad[2*MAXSIZE*MAXSIZE]; int power2(int n) { int ans = 1; while (ans < n) ans *= 2; return ans; } bool sameChildren(int p) { p *= 4; if (quad[p+1] == -1 || quad[p+2] == -1 || quad[p+3] == -1 || quad[p+4] == -1) return false; int sum = quad[p+1] + quad[p+2] + quad[p+3] + quad[p+4]; return (sum == 0 || sum == 4); } void storeVals(int r, int c, int size, int& loc) { if (size == 1) { //cout << "storing " << grid[r][c] << "(location " << r << ',' << c << ") in " << loc <> n >> m; while (n != 0) { int nn = power2(n); int mm = power2(m); if (nn < mm) nn = mm; int startLoc = (nn*nn-1)/3; //cout << nn << ',' << startLoc << endl; for(int i=0; i> ch; grid[i][j] = ch-'0'; } for(int j=m; j 0); for(int i=0; i<(4*nn*nn-1)/3; i++) squad[i] = quad[i]; for(int i=1; i<(nn*nn-1)/3; i++) for(int j=i+1; j<(nn*nn-1)/3; j++) if (sameTree(i, j) && quad[i] == -1) squad[j] = -2; cout << numNodes << ' ' << countSquadNodes(0) << endl; /* for(i=0; i<(4*nn*nn-1)/3; i++) cout << quad[i]; cout << endl; for(i=0; i<(4*nn*nn-1)/3; i++) cout << squad[i]; cout << endl; */ cin >> n >> m; } return 0; }