Advertisement
chevengur

СПРИНТ № 6 | Просто о сложности. Теория быстродействия | Урок 5: Улучшаем сложность

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