fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. //#include <bitset>//サイズ指定がコンパイルタイムだったOrz あいたたたた・・・。
  4. #include <random>
  5. #include <algorithm>
  6.  
  7. std::vector<std::size_t> MakeRandom(std::size_t N){
  8. std::vector<std::size_t> vec(N);
  9. std::size_t i = 0;
  10.  
  11. for (auto& o : vec) o = i++;
  12.  
  13. std::random_device rd;
  14. std::mt19937 mt(rd());
  15.  
  16. std::shuffle(vec.begin(), vec.end(), mt);
  17.  
  18. return vec;
  19.  
  20. }
  21.  
  22. std::pair<std::size_t, std::size_t> MakeHoge(std::size_t N,bool IsShowArray=false){
  23.  
  24. std::vector<bool> bvec(N);//vecter<bool>の実装は適当なのでちゃんとメモリ圧縮できてるか自信ない。
  25. auto vec = MakeRandom(N);
  26. std::size_t V[2] = { 0, 0 };
  27. int C=0;
  28.  
  29. vec.pop_back();//ランダムから2つ落す。
  30. vec.pop_back();
  31.  
  32. for (std::size_t i = 0; i < vec.size(); i++)
  33. {
  34. bvec[vec[i]] = true;
  35. if (IsShowArray == true) std::cout << vec[i] << ',';
  36. }
  37. if (IsShowArray == true) std::cout << std::endl;
  38. for (std::size_t i = 0; i < bvec.size(); i++)
  39. {
  40. if (bvec[i] == false) {
  41. V[C] = i;
  42. C++;
  43. if (C == 2) break;
  44. }
  45. }
  46.  
  47. if (V[0]>V[1]) std::swap(V[0], V[1]);
  48.  
  49. return std::make_pair(V[0], V[1]);
  50. }
  51.  
  52. int main(){
  53.  
  54. std::pair<std::size_t, std::size_t> P;
  55.  
  56. P = MakeHoge(16, true);
  57.  
  58. std::cout << "I find the " << P.first << " & " << P.second << "!!" << std::endl;
  59.  
  60.  
  61. return 0;
  62. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
8,2,5,14,12,0,10,11,1,15,7,3,9,13,
I find the 4 & 6!!