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

23,55,40,52,1,8,17,55,9,13,6,22,11,22,20,37,22,52,30,47,24,18,38,29,12,25,49,13,2,30,37,51,23,26,31,24,8,52,11,43,45,40,54,45,18,6,39,29,49,48,50,46,5,46,3,16,10,4,49,37,6,33,24,37,53,23,30,11,39,16,18,8,38,44,46,23,2,2,42,35,55,37,42,17,16,25,44,13,6,5,25,26,50,6,17,50,16,7,8,29,2,

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

31,33,40,47,34,48,30,47,24,35,36,22,25,17,50,4,54,15,22,27,44,45,30,27,32,22,51,46,4,19,5,36,2,21,46,53,43,8,48,48,54,27,44,45,26,29,43,38,7,40,36,33,8,30,52,42,29,6,23,27,15,11,43,41,26,12,32,8,2,18,34,9,34,13,34,22,52,50,38,25,20,34,25,50,39,6,4,54,37,36,37,10,12,20,8,42,18,34,21,18,32,

23,55,40,52,1,8,17,55,9,13,6,22,11,22,20,37,22,52,30,47,24,18,38,29,12,25,49,13,2,30,37,51,23,26,31,24,8,52,11,43,45,40,54,45,18,6,39,29,49,48,50,46,5,46,3,16,10,4,49,37,6,33,24,37,53,23,30,11,39,16,18,8,38,44,46,23,2,2,42,35,55,37,42,17,16,25,44,13,6,5,25,26,50,6,17,50,16,7,8,29,2,

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