Advertisement
Argent007

АиАС 29.09.23

Sep 29th, 2023
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.68 KB | None | 0 0
  1. // ConsoleApplication1.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. template <typename T>
  11. std::pair<T*, T*> minmax(T* first, T* last)
  12. {
  13.     int count = last - first;
  14.     if (count == 0) return { nullptr,nullptr };
  15.     T *min=first, *max=first;
  16.     if(count%2==0)
  17.         if (*first < *(first + 1))
  18.             max = first + 1;
  19.         else
  20.             min = first + 1;
  21.     for (T* cur = first + 2 - count % 2; cur != last; cur += 2)
  22.     {
  23.         if (*cur < *(cur + 1))
  24.         {
  25.             min = *cur < *min ? cur : min;
  26.             max = *max < *(cur + 1) ? cur + 1 : max;
  27.         }
  28.         else
  29.         {
  30.             min = *(cur+1) < *min ? cur+1 : min;
  31.             max = *max < *cur ? cur : max;
  32.         }
  33.     }
  34.     return{ min,max };
  35. }
  36.  
  37. template <typename T>
  38. void minmax_sort(T* first, T* last)
  39. {
  40.     if (last - first <= 1) return;
  41.     for (T* begin = first, *end = last - 1; end - begin > 0; begin++, end--)
  42.     {
  43.         auto [min, max] = minmax(begin, end + 1);
  44.         std::swap(*begin, *min);
  45.         if (max == begin)
  46.             std::swap(*end, *min);
  47.         else
  48.             std::swap(*end, *max);
  49.     }
  50. }
  51.  
  52. pair<int, int> maximal_polyndromic_substring(const string& seq)
  53. {
  54.     if (seq == "")return{ 0,0 };
  55.     for (int len = seq.length(); len > 0; --len)
  56.     {
  57.         for (size_t begin = 0; begin <= seq.length()-len; begin++)
  58.         {
  59.             int oddcount = 0;
  60.             for (size_t i = 0; i < 26; i++)
  61.                 if (1 & std::count(std::begin(seq) + begin, std::begin(seq) + begin + len, 'a' + i))
  62.                     ++oddcount;
  63.             if (len % 2 && oddcount == 1 || len % 2 == 0 && oddcount == 0)
  64.                 return { begin,len };
  65.         }
  66.     }
  67.     return { 1,1 };
  68. }
  69.  
  70. int main()
  71. {
  72.     string s = "abracadabraaradakedavra";
  73.     auto [begin, len] = maximal_polyndromic_substring(s);
  74.     std::cout << s.substr(begin, len) << std::endl;
  75.     int m[] = { 5,2,9,2,1,0,3,6 };
  76.     minmax_sort(m, m + std::size(m));
  77.     for (size_t i = 0; i < std::size(m); i++)
  78.     {
  79.         std::cout << m[i] << " ";
  80.     }
  81.     std::cout << std::endl;
  82.     std::cout << "Hello World!\n";
  83. }
  84.  
  85. // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
  86. // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
  87.  
  88. // Советы по началу работы
  89. //   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
  90. //   2. В окне Team Explorer можно подключиться к системе управления версиями.
  91. //   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
  92. //   4. В окне "Список ошибок" можно просматривать ошибки.
  93. //   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
  94. //   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement