fork(1) download
  1. #include <vector>
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <array>
  5. int main()
  6. {
  7. const int kDesired = 0;
  8. std::vector<int> a = { 1, -1, 2, 0, -2, 4, -2, -2, 4 };
  9. std::sort(a.begin(), a.end());
  10. std::vector<std::array<int, 3>> triples;
  11. for (int i = 0; i < (int)a.size(); ++i) {
  12. const int others = kDesired - a[i];
  13. for (int j = i + 1; j < (int)a.size(); ++j) {
  14. for (int k = (int)a.size() - 1; k > j; --k) {
  15. if (a[j] + a[k] == others) {
  16. triples.push_back({ { a[i], a[j], a[k] } });
  17. }
  18. else if (a[j] + a[k] < others) {
  19. break;
  20. }
  21. while (j + 1 < k && k < (int)a.size() && a[k] == a[k - 1]) --k;
  22. }
  23. while (i + 1 <= j && j < (int)a.size() - 1 && a[j] == a[j + 1]) ++j;
  24. }
  25. while (0 <= i && i < (int)a.size() - 1 && a[i] == a[i + 1]) ++i;
  26. }
  27. for (const auto& t : triples) {
  28. std::cout << t[0] << " " << t[1] << " " << t[2] << std::endl;
  29. }
  30. return 0;
  31. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
-2 -2 4
-2 0 2
-1 0 1