fork download
  1. struct Bitmap {
  2. color getColor(point p);
  3. point next(point p);
  4. }
  5. struct Pixel {
  6. color C;
  7. point P
  8. };
  9. std::map<Bitmap*, Pixel> GetUniquePixels(const std::vector<Bitmap>& bitmaps) {
  10. typedef unordered_map<color,Bitmap*> maybe_unique;
  11. typedef unordered_set<color> not_unique;
  12. std::map<point, std::pair<maybe_unique, not_unique>> uniqueness;
  13. for(int bit = 0; bit < bitmaps.size(); ++bit)
  14. for(point p = 0; p < bitmaps.size(); p = bitmap.next(point);
  15. color cur = bitmaps[bit].getColor(p);
  16. auto cur_unique = uniqueness[p];
  17. if (cur_unique.second.find(cur) != cur_unique.second.end())
  18. continue;
  19. auto it = cur_unique.first.find(cur);
  20. if (it != cur_unique.first.end()) {
  21. cur_unique.first.erase(cur);
  22. cur_unique.second.insert(cur);
  23. } else {
  24. cur_unique.first.insert(std::make_pair(cur, &bitmaps[bit]));
  25. }
  26. }
  27. }
  28. std::map<Bitmap, Pixel> result;
  29. for(auto u_it = uniqueness.begin(); u_it != uniqueness.end() ++u_it) {
  30. for(auto m_it = u_it->first.begin(); m_it != u_it->first.end(); ++m_it)
  31. result.insert(std::make_pair(m_it->second, Pixel(u_it->first, m_it->first));
  32. }
  33. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty