Задача 6392. Источник: Поляков. Задание КИМ 24
(А. Богданов) Текстовый файл 24-256.txt состоит не более чем из 106 символов и содержит только буквы латинского алфавита и десятичные цифры. Определите максимальное количество идущих подряд символов, среди которых любые два символа из набора N,O,T в различных комбинациях (с учётом повторений) не стоят через один символ (который может быть любым). Например, ТEN или NUТ не могут быть в искомой подстроке.
Решение
Посимвольно просматриваем строку, начиная с третьего символа. Если текущий символ и символ через один перед ним входят в запретную тройку, цепочка прервалась, и текущий символ и символ перед ним становятся первыми двумя символами новой цепочки, иначе счетчик текущей цепочки увеличивается.
Python
s = open('24-256.txt').readline()
k = 2
mx = 2
for i in range(2,len(s)):
if s[i - 2] in 'NOT' and s[i] in 'NOT':
k = 2
else:
k += 1
mx = max(mx, k)
print(mx)
PascalABC
var
max, k, i: Integer;
s: String;
f: TEXT;
begin
Assign(f, '24-256.txt');
Reset(f);
Readln(f, s);
max := 2;
k := 2;
for i := 3 to s.Length do
begin
if (s[i - 2] in 'NOT') and (s[i] in 'NOT') then
k := 2
else
begin
k := k + 1;
if k > max then
max := k;
end;
end;
Writeln(max);
end.
C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f;
f.open("24-256.txt");
string s, n = "NOT";
f >> s;
int k = 2, max = 2;
for (int i = 2; i < s.length(); i++)
{
if (n.find(s[i - 2]) != -1 && n.find(s[i]) != -1)
k = 2;
else
{
k++;
if (k > max)
max = k;
}
}
cout << max << endl;
}
Ответ
1461