Программное решение задач ЕГЭ по информатике

Задача 6392. Источник: Поляков. Задание КИМ 24

Страница задачи 6392

(А. Богданов) Текстовый файл 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

Отправить замечание по решению

Код по которому имеется замечание:

Ваш вариант кода:

Комментарий: