fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdint>
  4. #include <algorithm>
  5. #include <random>
  6.  
  7. typedef std::vector<std::int64_t> DType;
  8.  
  9. DType MakeArray(unsigned int Seed = std::mt19937::default_seed) {
  10. std::mt19937 mt(Seed);
  11. DType D{ 0,1,2,3,4,5,6,7,8,9 };
  12.  
  13. std::shuffle(D.begin(), D.end(), mt);
  14.  
  15. return D;
  16.  
  17. }
  18.  
  19. template<class INT=std::uint64_t>
  20. INT GetRandom(const INT& Under, const INT& Upper) {
  21. static std::random_device rd;
  22. static std::mt19937 mt(rd());
  23. std::uniform_int_distribution<INT> UI(Under, Upper);
  24.  
  25. return UI(mt);
  26. }
  27.  
  28. bool Show(const DType& A,const std::uint64_t& B,const std::uint64_t& C,const std::uint64_t& D,const DType& R) {
  29. std::cout << "[Idx:" << B << " N:" << C << " Far:" << D << "] ";
  30. for (auto& o : A)std::cout << o << ' ';
  31. std::cout << " -> ";
  32. for (auto& o : R)std::cout << o << ' ';
  33. std::cout << std::endl;
  34. return true;
  35. }
  36.  
  37.  
  38. DType MakeHoge(const DType& A,const std::uint64_t& B,const std::uint64_t& C,const std::uint64_t& D) {
  39. if (A.size() == 0)return A;
  40. DType T = A;
  41. std::rotate(T.begin(), T.begin() + B, T.end());
  42. DType V{ T.begin(),T.begin()+(C) };
  43. if (C == 0)return A;
  44. T.erase(T.begin(), T.begin()+(C));
  45. T.insert(T.begin() + (D%T.size()), V.begin(), V.end());
  46. std::rotate(T.begin(), T.begin() +(T.size()- B), T.end());
  47. return T;
  48. }
  49.  
  50. int main()
  51. {
  52. DType A{ 0,1,2,3,4,5,6,7,8,9 };
  53. std::uint64_t B, C, D;
  54. DType R;
  55.  
  56. B = 3;
  57. C = 1;
  58. D = 5;
  59. R = MakeHoge(A, B, C, D);
  60. Show(A, B, C, D, R);
  61.  
  62. B = 1;
  63. C = 3;
  64. D = 1;
  65. R = MakeHoge(A, B, C, D);
  66. Show(A, B, C, D, R);
  67.  
  68. B = 7;
  69. C = 1;
  70. D = 5;
  71. R = MakeHoge(A, B, C, D);
  72. Show(A, B, C, D, R);
  73.  
  74. B = 0;
  75. C = 8;
  76. D = 1;
  77. R = MakeHoge(A, B, C, D);
  78. Show(A, B, C, D, R);
  79.  
  80. B = 4;
  81. C = 5;
  82. D = 4;
  83. R = MakeHoge(A, B, C, D);
  84. Show(A, B, C, D, R);
  85.  
  86. B = 9;
  87. C = 5;
  88. D = 4;
  89. R = MakeHoge(A, B, C, D);
  90. Show(A, B, C, D, R);
  91.  
  92. B = 7;
  93. C = 3;
  94. D = 1;
  95. R = MakeHoge(A, B, C, D);
  96. Show(A, B, C, D, R);
  97.  
  98. std::cout << std::endl;
  99.  
  100. for (std::size_t i = 0; i < 10; i++) {
  101. A = DType{ 0,1,2,3,4,5,6,7,8,9 };
  102. B = GetRandom<std::uint64_t>(0, 9);
  103. C = GetRandom<std::uint64_t>(0, 9);
  104. D = GetRandom<std::uint64_t>(0, 9);
  105. R = MakeHoge(A, B, C, D);
  106. Show(A, B, C, D, R);
  107. }
  108. for (std::size_t i = 0; i < 10; i++) {
  109. A = MakeArray(i);
  110. B = GetRandom<std::uint64_t>(0, 9);
  111. C = GetRandom<std::uint64_t>(0, 9);
  112. D = GetRandom<std::uint64_t>(0, 9);
  113. R = MakeHoge(A, B, C, D);
  114. Show(A, B, C, D, R);
  115. }
  116. return 0;
  117. }
Success #stdin #stdout 0s 4260KB
stdin
Standard input is empty
stdout
[Idx:3 N:1 Far:5] 0 1 2 3 4 5 6 7 8 9  ->  0 1 2 4 5 6 7 8 3 9 
[Idx:1 N:3 Far:1] 0 1 2 3 4 5 6 7 8 9  ->  0 4 1 2 3 5 6 7 8 9 
[Idx:7 N:1 Far:5] 0 1 2 3 4 5 6 7 8 9  ->  1 2 7 3 4 5 6 8 9 0 
[Idx:0 N:8 Far:1] 0 1 2 3 4 5 6 7 8 9  ->  8 0 1 2 3 4 5 6 7 9 
[Idx:4 N:5 Far:4] 0 1 2 3 4 5 6 7 8 9  ->  6 7 8 3 9 0 1 2 4 5 
[Idx:9 N:5 Far:4] 0 1 2 3 4 5 6 7 8 9  ->  5 6 7 9 0 1 2 3 8 4 
[Idx:7 N:3 Far:1] 0 1 2 3 4 5 6 7 8 9  ->  9 1 2 3 4 5 6 0 7 8 

[Idx:2 N:7 Far:5] 0 1 2 3 4 5 6 7 8 9  ->  8 1 9 0 2 3 4 5 6 7 
[Idx:0 N:5 Far:0] 0 1 2 3 4 5 6 7 8 9  ->  0 1 2 3 4 5 6 7 8 9 
[Idx:3 N:3 Far:9] 0 1 2 3 4 5 6 7 8 9  ->  0 1 2 6 7 3 4 5 8 9 
[Idx:7 N:8 Far:2] 0 1 2 3 4 5 6 7 8 9  ->  0 1 2 3 4 5 6 7 8 9 
[Idx:8 N:8 Far:9] 0 1 2 3 4 5 6 7 8 9  ->  9 0 1 2 3 4 5 7 6 8 
[Idx:8 N:0 Far:6] 0 1 2 3 4 5 6 7 8 9  ->  0 1 2 3 4 5 6 7 8 9 
[Idx:9 N:4 Far:0] 0 1 2 3 4 5 6 7 8 9  ->  0 1 2 3 4 5 6 7 8 9 
[Idx:0 N:3 Far:9] 0 1 2 3 4 5 6 7 8 9  ->  3 4 0 1 2 5 6 7 8 9 
[Idx:9 N:4 Far:1] 0 1 2 3 4 5 6 7 8 9  ->  9 0 1 2 4 5 6 7 8 3 
[Idx:5 N:4 Far:0] 0 1 2 3 4 5 6 7 8 9  ->  0 1 2 3 4 5 6 7 8 9 
[Idx:2 N:1 Far:4] 0 2 3 5 9 1 6 8 4 7  ->  0 2 5 9 1 6 3 8 4 7 
[Idx:5 N:0 Far:8] 6 9 7 2 4 1 5 3 8 0  ->  6 9 7 2 4 1 5 3 8 0 
[Idx:6 N:8 Far:5] 3 0 1 7 9 2 6 5 4 8  ->  8 3 0 1 7 2 9 6 5 4 
[Idx:7 N:6 Far:8] 6 5 3 0 7 8 2 4 9 1  ->  6 5 3 0 7 8 2 4 9 1 
[Idx:5 N:3 Far:3] 4 1 3 2 0 8 9 6 7 5  ->  6 1 3 2 0 7 5 4 8 9 
[Idx:1 N:0 Far:9] 2 5 6 3 9 0 1 7 8 4  ->  2 5 6 3 9 0 1 7 8 4 
[Idx:5 N:3 Far:2] 7 9 2 8 5 3 0 6 1 4  ->  7 9 2 8 5 1 4 3 0 6 
[Idx:1 N:9 Far:3] 2 4 5 3 8 7 6 1 0 9  ->  2 4 5 3 8 7 6 1 0 9 
[Idx:7 N:2 Far:4] 2 4 9 3 7 5 0 8 1 6  ->  9 8 1 3 7 5 0 6 2 4 
[Idx:9 N:3 Far:5] 6 9 8 0 3 4 1 2 5 7  ->  0 3 4 1 7 6 9 2 5 8