Skip to main content

Solution to UVa297 - Quadtrees using C++


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

Popular posts from this blog

Solution to UVa 10608 - Friends in C++ using Union Find

This is the solution to this UVa problem Code #include <iostream> #include <iostream> #include<bits/stdc++.h> #define pb push_back #define T 50005 using namespace std; int p[T]; int r[T]; void ini(int n){ for(int i=0;i<n;i++){ p[i]=i; r[i]=1; } } int root(int a){ while(p[a]!=a){ p[a]=p[p[a]]; a=p[a]; } return a; } void joint(int a,int b){ if (a==b) return; a=root(a); b=root(b); if (a == b) return; if(r[a]>r[b]){ r[a]+=r[b]; p[b]=a; return; } r[b]+=r[a]; p[a]=b; } bool query(int a, int b){ return p[a]==p[b]; } int main() { std::ios::sync_with_stdio(false); int breaker; cin>>breaker; int test=0; while(1){ test++; if(test>breaker) break; int n,m; cin >> n>>m; if(n==0 && m==0) break; ini(n); while(m--){ int i,j; cin>>i>>j; joint(i-1,j-1); } int counter=0; int maxi=0; for(int i =0;i<n;i++){ maxi=max(maxi,r[i]); } cout&