This is the solution to this UVa problem based on Quad Tree.
Code
#include <iostream> #include <bits/stdc++.h> #define pb push_back using namespace std; int gi; void filler(vector<vector<int>>& a, string s, int l = 0, int r = 31, int t = 0, int d = 31) { if (s[gi] == 'e') { gi++; return; } if (s[gi] == 'f') { for (int i = t; i <= d; i++) for (int j = l; j <= r; j++) a[i][j] = 1; gi++; return; } gi++; filler(a, s, (l + r) / 2 + 1, r, t, (t + d) / 2); filler(a, s, l, (l + r) / 2, t, (t + d) / 2); filler(a, s, l, (l + r) / 2, (t + d) / 2 + 1, d); filler(a, s, (l + r) / 2 + 1, r, (t + d) / 2 + 1, d); } int main() { std::ios::sync_with_stdio(false); int n; cin >> n; while (n--) { string s1, s2; cin >> s1 >> s2; vector<vector<int>> a(32, vector<int>(32, 0)); vector<vector<int>> b(32, vector<int>(32, 0)); gi = 0; filler(a, s1); gi = 0; filler(b, s2); int counter = 0; for (int i = 0; i < 32; i++) for (int j = 0; j < 32; j++) if (a[i][j] || b[i][j]) counter++; cout << "There are " << counter << " black pixels.\n"; } return 0; }
Comments
Post a Comment