fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdint>
  4. #include <algorithm>
  5. #include <tuple>
  6. #include <functional>
  7.  
  8. typedef std::vector<std::int64_t> DType;
  9. typedef std::vector<DType> RType;
  10.  
  11.  
  12. bool Add(DType& D,std::size_t Rdx) {
  13. bool C = true;
  14. if (D.size() == 0)return false;
  15.  
  16. for (std::size_t i = 0; i < D.size(); i++) {
  17. if (C == true) {
  18. D[i]++;
  19. }
  20. else {
  21. return true;
  22. }
  23. C = false;
  24. if (D[i] > Rdx) {
  25. C = true;
  26. D[i] = 1;
  27. }
  28. }
  29.  
  30. return false;
  31. }
  32.  
  33.  
  34. DType MakeVector(std::size_t N) {
  35. DType V(N);
  36. std::int64_t i = 1;
  37. for (auto& o : V) {
  38. o = i;
  39. i++;
  40. }
  41.  
  42. return V;
  43. }
  44.  
  45. bool IsAnswer(DType& D, std::size_t N) {
  46. std::int64_t V = 0;
  47. for (auto& o : D) {
  48. V += o;
  49. }
  50. return V == N;
  51. }
  52.  
  53. RType MakeHoge(std::size_t N) {
  54. DType D;
  55.  
  56. RType R;
  57. for (std::size_t i = 1; i < N + 1; i++) {
  58. D.clear();
  59. D.resize(i, 1);
  60. std::size_t Rdx = N - D.size() + 1;
  61. do {
  62. if (IsAnswer(D, N)) {
  63. R.push_back(D);
  64. }
  65. Add(D, Rdx+1);
  66. } while (Rdx+1 != D.back());
  67. }
  68.  
  69. for (auto& o : R) {
  70. std::sort(o.begin(), o.end(),std::greater<DType::value_type>());
  71. }
  72. std::sort(R.begin(), R.end());
  73. R.erase(std::unique(R.begin(), R.end()), R.end());
  74.  
  75. return R;
  76. }
  77.  
  78. bool Show(RType& R) {
  79. for (auto& oo : R) {
  80. for (auto &o : oo) {
  81. std::cout << o << ' ';
  82. }
  83. std::cout << std::endl;
  84. }
  85. return true;
  86. }
  87.  
  88. int main() {
  89. RType R;
  90.  
  91. R = MakeHoge(10);
  92. Show(R);
  93.  
  94. return 0;
  95. }
Success #stdin #stdout 0s 15248KB
stdin
Standard input is empty
stdout
1 1 1 1 1 1 1 1 1 1 
2 1 1 1 1 1 1 1 1 
2 2 1 1 1 1 1 1 
2 2 2 1 1 1 1 
2 2 2 2 1 1 
2 2 2 2 2 
3 1 1 1 1 1 1 1 
3 2 1 1 1 1 1 
3 2 2 1 1 1 
3 2 2 2 1 
3 3 1 1 1 1 
3 3 2 1 1 
3 3 2 2 
3 3 3 1 
4 1 1 1 1 1 1 
4 2 1 1 1 1 
4 2 2 1 1 
4 2 2 2 
4 3 1 1 1 
4 3 2 1 
4 3 3 
4 4 1 1 
4 4 2 
5 1 1 1 1 1 
5 2 1 1 1 
5 2 2 1 
5 3 1 1 
5 3 2 
5 4 1 
5 5 
6 1 1 1 1 
6 2 1 1 
6 2 2 
6 3 1 
6 4 
7 1 1 1 
7 2 1 
7 3 
8 1 1 
8 2 
9 1 
10