Advertisement
kutuzzzov

Урок 5 Улучшаем сложность

Nov 3rd, 2022
692
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4. #include <random>
  5.  
  6. using namespace std;
  7.  
  8. // функция возвращает true, если векторы из одинаковых элементов
  9. // перепишите эту функцию, улучшив её асимптотическую сложность
  10. bool TestPermut(const vector<int>& v1, const vector<int>& v2) {
  11.     vector<int> new_v1 = v1;
  12.     vector<int> new_v2 = v2;
  13.    
  14.     // если они разной длины, элементы заведомо разные
  15.     if (new_v1.size() != new_v2.size()) {
  16.         return false;
  17.     }
  18.     sort(new_v1.begin(), new_v1.end());
  19.     sort(new_v2.begin(), new_v2.end());
  20.     return new_v1 == new_v2;
  21. }
  22.  
  23. int main() {
  24.     std::mt19937 g;
  25.  
  26.     int n;
  27.     cin >> n;
  28.     vector<int> v1, v2;
  29.     v1.reserve(n);
  30.     v2.reserve(n);
  31.  
  32.     for (int i = 0; i < n; ++i) {
  33.         v1.push_back(rand());
  34.         v2.push_back(rand());
  35.     }
  36.  
  37.     // оба вектора случайны, вряд ли они совпадут
  38.     cout << "Random vectors match? "s << flush;
  39.     cout << (TestPermut(v1, v2) ? "Yes"s : "No"s) << endl;
  40.  
  41.     // делаем один перестановкой другого явным образом
  42.     v2 = v1;
  43.     shuffle(v2.begin(), v2.end(), g);
  44.     cout << "Permuted vectors match? "s << flush;
  45.     cout << (TestPermut(v1, v2) ? "Yes"s : "No"s) << endl;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement