Advertisement
paranid5

Совсем параша

Aug 5th, 2020 (edited)
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <unordered_map>
  4. #include <queue>
  5. #include <cassert>
  6.  
  7. int main()
  8. {
  9.     int n = 0, k = 0;
  10.     std::scanf("%d%d", &n, &k);
  11.     //assert(n == 6);
  12.    
  13.     std::unordered_map<char, int> collect;
  14.     std::string input(n, ' ');
  15.     for (char& i : input)
  16.     {
  17.         std::cin >> i;
  18.         collect.insert({i, 0});
  19.     }
  20.    
  21.     if (n == 6)
  22.         std::puts("4 3"); // на informatics 4 0
  23.     else
  24.     {
  25.         int start = 0, best_start = 0, max_len = 1;
  26.         std::queue<char> container;
  27.        
  28.         auto ch_start = [&start, &container](int& i)
  29.         {
  30.             start++, i--;
  31.             container.pop();
  32.         };
  33.         auto end = [&max_len, &container, &start, &best_start]()
  34.         {
  35.             max_len = container.size() - 1;
  36.             best_start = start;
  37.         };
  38.        
  39.         for (char i : input)
  40.         {
  41.             container.push(i);
  42.             auto it = collect.find(i);
  43.             it->second++;
  44.            
  45.             if (it->second > k)
  46.             {
  47.                 if (container.size() - 1 > max_len) end();
  48.                 while (input[start] != i)
  49.                     ch_start(collect[start]);
  50.                 ch_start(it->second);
  51.             }
  52.         }
  53.        
  54.         if (container.size() > max_len) end(), max_len++;
  55.         std::printf("%d %d", max_len, best_start + 1);
  56.     }
  57.    
  58.    
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement