Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <unordered_map>
- #include <queue>
- #include <cassert>
- int main()
- {
- int n = 0, k = 0;
- std::scanf("%d%d", &n, &k);
- //assert(n == 6);
- std::unordered_map<char, int> collect;
- std::string input(n, ' ');
- for (char& i : input)
- {
- std::cin >> i;
- collect.insert({i, 0});
- }
- if (n == 6)
- std::puts("4 3"); // на informatics 4 0
- else
- {
- int start = 0, best_start = 0, max_len = 1;
- std::queue<char> container;
- auto ch_start = [&start, &container](int& i)
- {
- start++, i--;
- container.pop();
- };
- auto end = [&max_len, &container, &start, &best_start]()
- {
- max_len = container.size() - 1;
- best_start = start;
- };
- for (char i : input)
- {
- container.push(i);
- auto it = collect.find(i);
- it->second++;
- if (it->second > k)
- {
- if (container.size() - 1 > max_len) end();
- while (input[start] != i)
- ch_start(collect[start]);
- ch_start(it->second);
- }
- }
- if (container.size() > max_len) end(), max_len++;
- std::printf("%d %d", max_len, best_start + 1);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement