smatskevich

Seminar7

Nov 11th, 2021
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5.  
  6. // 4 92 5 3 48 1 34
  7. // 4 5 3 1 34 92 48
  8. // 1 4 5 3 34 92 48
  9. // 1 3 4 5 34 92 48
  10. // 1 3 4 5 34 92 48
  11.  
  12. // 0: 1
  13. // 1: 3
  14. // 3: 5
  15. // 4: 34
  16. // 6: 92
  17.  
  18. // 1 2 3 5 6 4
  19. //     j i
  20. // Возвращает позицию опорного элемента после разбиения.
  21. int Partition(std::vector<double>& v, int l, int r) {
  22.     int i = l;
  23.     int j = r - 2;
  24.     while (i <= j) {
  25.         for (; i < r && v[i] <= v[r - 1]; ++i);
  26.         for (; j >= 0 && v[j] >= v[r - 1]; --j);
  27.         if (i < j) std::swap(v[i], v[j]);
  28.     }
  29.     std::swap(v[i], v[r - 1]);
  30.     return i;
  31. }
  32.  
  33. double KStat(std::vector<double>& v, int k) {
  34.     if (k > v.size()) {
  35.         throw std::out_of_range("Запросили несуществующую статистику");
  36.     }
  37.     // l – включительно, r – не включается в рассмотрение.
  38.     int l = 0;
  39.     int r = v.size();
  40.     while (true) {
  41.         int pivot_pos = Partition(v, l, r);
  42.         if (pivot_pos == k) {
  43.             return v[k];
  44.         }
  45.         if (pivot_pos < k) {
  46.             l = pivot_pos + 1;
  47.         } else {
  48.             r = pivot_pos;
  49.         }
  50.     }
  51. }
  52.  
  53. int main() {
  54.     std::vector<double> v{4, 92, 5, 3, 48, 1, 34};
  55.     int k = 0;
  56.     std::cin >> k;
  57.     std::cout << KStat(v, k);
  58.     return 0;
  59. }
  60.  
  61. // Функция сравнения строк.
  62. // a < z
  63. // ab < z
  64. // a < ab
  65. bool CompareStrings(const std::string& str1, const std::string& str2) {
  66.     const size_t min_length = std::min(str1.length(), str2.length());
  67.  
  68.     for (int i = 0; i < min_length; ++i) {
  69.         if (str1[i] < str2[i]) return true;
  70.         if (str1[i] > str2[i]) return false;
  71.     }
  72.     return min_length != str2.length();
  73. }
  74.  
  75. long long x = 1;
  76.  
  77. int main1() {
  78.     std::cout << "=================" << std::endl;
  79.     for (char i = 1; i < 127; ++i) {
  80.         std::cout << i;
  81.         if (i % 32 == 0) std::cout << std::endl;
  82.     }
  83.     std::cout << "=================" << std::endl;
  84.  
  85.     std::string s1, s2;
  86.     std::cin >> s1 >> s2;
  87.     std::cout << (CompareStrings(s1, s2) ? "True" : "False") << std::endl;
  88.     return 0;
  89. }
  90.  
Add Comment
Please, Sign In to add comment