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

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

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

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

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

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