fork download
  1. #include <array>
  2. #include <utility>
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <unordered_map>
  6. using type_key = unsigned long long;
  7. using type_value = std::array<std::pair<unsigned int, unsigned int>, 5>;
  8. size_t value_valid_size(type_value &values) {
  9. size_t i, size = values.size();
  10. for (i = 0; i < size && values[i].first; i++);
  11. return i;
  12. }
  13. void value_inspect(type_value &values) {
  14. std::cout << "[";
  15. for (size_t i = 0; i < values.size(); i++) {
  16. if (0 < i) std::cout << ", ";
  17. std::cout << "[" << values[i].first << ", " << values[i].second << "]";
  18. }
  19. std::cout << "]";
  20. }
  21. type_value &value_append(type_value &values, type_value::value_type value) {
  22. size_t cap = values.size(), size = value_valid_size(values);
  23. if (size < cap)
  24. values[size] = value;
  25. else
  26. fprintf(stderr, "values.size(): %u, required: %u\n", cap, cap + 1), exit(EXIT_FAILURE);
  27. return values;
  28. }
  29. type_value &operator<<(type_value &values, type_value::value_type value) {
  30. return value_append(values, value);
  31. }
  32. type_value f(unsigned int m) {
  33. std::unordered_map<type_key, type_value> map(1 << 24);
  34. for (type_key a = 1; ; a++) {
  35. for (type_key b = 1; b < a; b++) {
  36. type_key c = a * a * a - b * b * b;
  37. if (value_valid_size(value_append(map[c], {a, b})) == m) return map[c];
  38. }
  39. }
  40. return {{}};
  41. }
  42. int main() {
  43. type_value v = f(5);
  44. value_inspect(v);
  45. return 0;
  46. }
  47.  
Success #stdin #stdout 4.18s 845472KB
stdin
Standard input is empty
stdout
[[1134, 357], [1155, 504], [1246, 805], [2115, 2004], [4746, 4725]]