Advertisement
Guest User

Untitled

a guest
Dec 17th, 2022
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. ifstream fin("input.txt");
  6. string line;
  7. set<vector<int>> P;
  8. while (getline(fin, line)) {
  9. if (line.empty()) continue;
  10. stringstream ss(line);
  11. vector<int> p;
  12. int x;
  13. while (ss >> x) {
  14. p.push_back(x);
  15. if (ss.peek() == ',') ss.ignore();
  16. }
  17. P.insert(p);
  18. }
  19. int sa = 0;
  20. for (auto p : P) {
  21. for (int axis = 0; axis < 3; ++axis) {
  22. for (int d = -1; d <= 1; d += 2) {
  23. vector<int> q = p;
  24. q[axis] += d;
  25. if (P.count(q) == 0) ++sa;
  26. }
  27. }
  28. }
  29. cout << sa << endl;
  30. vector<int> P_min(3, INT_MAX), P_max(3, INT_MIN);
  31. for (auto p : P) {
  32. for (int axis = 0; axis < 3; ++axis) {
  33. P_min[axis] = min(P_min[axis], p[axis]);
  34. P_max[axis] = max(P_max[axis], p[axis]);
  35. }
  36. }
  37. for (int axis = 0; axis < 3; ++axis) {
  38. --P_min[axis];
  39. ++P_max[axis];
  40. }
  41. vector<vector<int>> stack = {P_min};
  42. set<vector<int>> visited;
  43. sa = 0;
  44. while (!stack.empty()) {
  45. auto p = stack.back();
  46. stack.pop_back();
  47. if (visited.count(p)) continue;
  48. visited.insert(p);
  49. for (int axis = 0; axis < 3; ++axis) {
  50. for (int d = -1; d <= 1; d += 2) {
  51. vector<int> q = p;
  52. q[axis] += d;
  53. if (P.count(q)) ++sa;
  54. if (P.count(q) == 0 && visited.count(q) == 0) {
  55. bool ok = true;
  56. for (int axis = 0; axis < 3; ++axis) {
  57. if (q[axis] < P_min[axis] || q[axis] > P_max[axis]) {
  58. ok = false;
  59. break;
  60. }
  61. }
  62. if (ok) stack.push_back(q);
  63. }
  64. }
  65. }
  66. }
  67. cout << sa << endl;
  68. }
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement