fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdint>
  4. #include <algorithm>
  5. #include <random>
  6. #include <tuple>
  7.  
  8. typedef std::vector<std::int64_t> DType;
  9. typedef std::tuple<std::int64_t, std::int64_t> Pair;
  10. typedef std::vector<Pair> PType;
  11.  
  12. DType MakeVector(std::size_t N, unsigned int S) {
  13.  
  14. std::mt19937 mt(S);
  15. std::uniform_int_distribution<std::int64_t> ui(-50, 50);
  16. DType R;
  17.  
  18. for (std::size_t i = 0; i < N; i++) {
  19. R.push_back(ui(mt));
  20. }
  21.  
  22. return R;
  23. }
  24.  
  25. PType MakeHoge(DType A, DType B,std::uint64_t MaxDistance) {
  26.  
  27. auto F = [](auto& A, auto& B) {return std::abs(A) < std::abs(B); };
  28.  
  29. std::sort(A.begin(), A.end(),F);
  30. std::sort(B.begin(), B.end(),F);
  31.  
  32. std::reverse(A.begin(), A.end());
  33.  
  34. PType R;
  35. std::int64_t j = 0;
  36. for (std::size_t i = 0; i < A.size(); i++) {
  37. for (j = 0; j < B.size(); j++) {
  38. if (std::abs(A[i] - B[j]) <= MaxDistance) { break; }
  39. }
  40. if (std::abs(A[i] - B[j]) <= MaxDistance) {
  41. R.push_back({ A[i],B[j] });
  42. A.erase(A.begin() + i);
  43. i--;
  44. B.erase(B.begin() + j);
  45.  
  46. }
  47. }
  48. return R;
  49.  
  50. }
  51. PType MakeHoge2(DType A, DType B,std::uint64_t MaxDistance) {
  52. std::sort(A.begin(), A.end());
  53. std::sort(B.begin(), B.end());
  54.  
  55. PType R;
  56. std::int64_t j = 0;
  57. for (std::size_t i = 0; i < A.size(); i++) {
  58. if(std::abs(A[i]-B[i])<MaxDistance) R.push_back({ A[i],B[i] });
  59. }
  60. return R;
  61.  
  62. }
  63. bool Show(const DType& A, const DType& B, const PType& P,std::uint64_t Dist) {
  64.  
  65. for (auto& o : A) { std::cout << o << ','; }
  66. std::cout << std::endl;
  67. std::cout << std::endl;
  68. for (auto& o : B) { std::cout << o << ','; }
  69. std::cout << std::endl;
  70. std::cout << std::endl;
  71. std::cout << "MaxDistance:" << Dist << ". Make " << P.size() << "Pair." << std::endl;
  72.  
  73. for (auto& o : P) {
  74. auto AV = std::get<0>(o);
  75. auto BV = std::get<1>(o);
  76. auto PV = std::abs(AV - BV);
  77.  
  78. std::cout << AV << " - "<<BV<<'='<<PV<< std::endl;;
  79.  
  80. }
  81. std::cout << std::endl;
  82. return true;
  83. }
  84.  
  85. int main() {
  86.  
  87. std::random_device rd;
  88. auto A = MakeVector(100, rd());
  89. auto B = MakeVector(100, rd());
  90. std::uint64_t Distance = 50;
  91.  
  92. PType R1 = MakeHoge(A, B,Distance);
  93. PType R2 = MakeHoge2(A, B,Distance);
  94. Show(A, B, R1, Distance);
  95. Show(A, B, R2, Distance);
  96.  
  97. return 0;
  98.  
  99.  
  100. }
Success #stdin #stdout 0s 4140KB
stdin
Standard input is empty
stdout
41,-39,3,-25,7,-11,26,41,-29,22,33,6,-25,-39,13,-36,31,29,-37,16,-44,-46,-20,-2,12,-8,-3,-18,-4,-17,-21,-6,-46,-29,37,-14,-7,46,9,-47,-28,-49,16,-12,13,-10,-11,-16,10,-29,-23,38,41,16,-20,-23,-27,-41,33,1,14,33,-38,-31,-3,-4,47,27,-35,-40,1,-33,19,-16,16,-11,-42,-5,-31,43,0,-4,-23,10,34,-7,-15,15,-8,32,-21,13,32,-1,-35,-20,31,-20,-44,2,

7,11,-28,30,17,1,1,21,49,22,12,-29,42,-18,-19,12,0,39,-19,-18,-40,-26,-31,-19,-47,-12,-44,-50,-25,49,19,45,20,-26,-9,42,-2,-28,-32,-27,-13,-39,24,31,50,31,41,17,6,-1,-42,22,8,45,-50,36,-29,6,41,-21,13,7,9,-22,29,5,11,11,-16,-20,37,35,23,33,19,-10,20,-29,-35,-43,-35,-11,-20,30,21,-31,-25,27,-30,38,-22,0,-34,-2,3,-8,36,-44,-35,-20,

MaxDistance:50. Make 100Pair.
-49 - 0=49
47 - 0=47
-47 - -1=46
46 - 1=45
-46 - 1=47
-46 - -2=44
-44 - -2=42
-44 - 3=47
43 - 5=38
-42 - 6=48
41 - 6=35
-41 - 7=48
41 - 7=34
41 - 8=33
-40 - -8=32
-39 - -9=30
-39 - 9=48
-38 - -10=28
38 - 11=27
-37 - 11=48
37 - 11=26
-36 - -11=25
-35 - -12=23
-35 - 12=47
34 - 12=22
33 - -13=46
-33 - 13=46
33 - -16=49
33 - 17=16
32 - 17=15
32 - -18=50
-31 - -18=13
31 - -19=50
31 - 19=12
-31 - 19=50
-29 - -19=10
-29 - -19=10
29 - -20=49
-29 - 20=49
-28 - -20=8
27 - -20=47
-27 - 20=47
26 - -21=47
-25 - 21=46
-25 - 21=46
-23 - 22=45
-23 - -22=1
-23 - -22=1
22 - 22=0
-21 - 23=44
-21 - 24=45
-20 - -25=5
-20 - -25=5
-20 - -26=6
-20 - -26=6
19 - -27=46
-18 - 27=45
-17 - -28=11
16 - -28=44
16 - -29=45
-16 - -29=13
16 - -29=45
16 - 29=13
-16 - 30=46
15 - 30=15
-15 - -30=15
14 - 31=17
-14 - 31=45
13 - -31=44
13 - -31=44
13 - -32=45
12 - 33=21
-12 - -34=22
-11 - -35=24
-11 - 35=46
-11 - -35=24
-10 - -35=25
10 - 36=26
10 - 36=26
9 - 37=28
-8 - 38=46
-8 - -39=31
7 - 39=32
-7 - -40=33
-7 - 41=48
-6 - 41=47
6 - 42=36
-5 - -42=37
-4 - 42=46
-4 - -43=39
-4 - -44=40
-3 - -44=41
-3 - 45=48
3 - 45=42
-2 - -47=45
2 - 49=47
1 - 49=48
-1 - -50=49
1 - 50=49
0 - -50=50

41,-39,3,-25,7,-11,26,41,-29,22,33,6,-25,-39,13,-36,31,29,-37,16,-44,-46,-20,-2,12,-8,-3,-18,-4,-17,-21,-6,-46,-29,37,-14,-7,46,9,-47,-28,-49,16,-12,13,-10,-11,-16,10,-29,-23,38,41,16,-20,-23,-27,-41,33,1,14,33,-38,-31,-3,-4,47,27,-35,-40,1,-33,19,-16,16,-11,-42,-5,-31,43,0,-4,-23,10,34,-7,-15,15,-8,32,-21,13,32,-1,-35,-20,31,-20,-44,2,

7,11,-28,30,17,1,1,21,49,22,12,-29,42,-18,-19,12,0,39,-19,-18,-40,-26,-31,-19,-47,-12,-44,-50,-25,49,19,45,20,-26,-9,42,-2,-28,-32,-27,-13,-39,24,31,50,31,41,17,6,-1,-42,22,8,45,-50,36,-29,6,41,-21,13,7,9,-22,29,5,11,11,-16,-20,37,35,23,33,19,-10,20,-29,-35,-43,-35,-11,-20,30,21,-31,-25,27,-30,38,-22,0,-34,-2,3,-8,36,-44,-35,-20,

MaxDistance:50. Make 100Pair.
-49 - -50=1
-47 - -50=3
-46 - -47=1
-46 - -44=2
-44 - -44=0
-44 - -43=1
-42 - -42=0
-41 - -40=1
-40 - -39=1
-39 - -35=4
-39 - -35=4
-38 - -35=3
-37 - -34=3
-36 - -32=4
-35 - -31=4
-35 - -31=4
-33 - -30=3
-31 - -29=2
-31 - -29=2
-29 - -29=0
-29 - -28=1
-29 - -28=1
-28 - -27=1
-27 - -26=1
-25 - -26=1
-25 - -25=0
-23 - -25=2
-23 - -22=1
-23 - -22=1
-21 - -21=0
-21 - -20=1
-20 - -20=0
-20 - -20=0
-20 - -19=1
-20 - -19=1
-18 - -19=1
-17 - -18=1
-16 - -18=2
-16 - -16=0
-15 - -13=2
-14 - -12=2
-12 - -11=1
-11 - -10=1
-11 - -9=2
-11 - -8=3
-10 - -2=8
-8 - -2=6
-8 - -1=7
-7 - 0=7
-7 - 0=7
-6 - 1=7
-5 - 1=6
-4 - 3=7
-4 - 5=9
-4 - 6=10
-3 - 6=9
-3 - 7=10
-2 - 7=9
-1 - 8=9
0 - 9=9
1 - 11=10
1 - 11=10
2 - 11=9
3 - 12=9
6 - 12=6
7 - 13=6
9 - 17=8
10 - 17=7
10 - 19=9
12 - 19=7
13 - 20=7
13 - 20=7
13 - 21=8
14 - 21=7
15 - 22=7
16 - 22=6
16 - 23=7
16 - 24=8
16 - 27=11
19 - 29=10
22 - 30=8
26 - 30=4
27 - 31=4
29 - 31=2
31 - 33=2
31 - 35=4
32 - 36=4
32 - 36=4
33 - 37=4
33 - 38=5
33 - 39=6
34 - 41=7
37 - 41=4
38 - 42=4
41 - 42=1
41 - 45=4
41 - 45=4
43 - 49=6
46 - 49=3
47 - 50=3