Задача 6252. Источник: Поляков. Задание КИМ 24
(PRO100 ЕГЭ) Текстовый файл 24-253.txt состоит не более чем из 106 символов и содержит только буквы латинского алфавита A, C, D, F и O. Определите максимальное количество идущих подряд троек символов вида согласная + любая буква + гласная Например, для строки ACCADAADD ответом будет число 2 (ACCADAADD).
Решение
Просматривая строку посимвольно, анализируем тройку символов. Если требуемая комбинация нашлась, переходим к следующей тройке. Если комбинация не нашлась, то проверяем, являются ли два последних символа предыдущей последовательности началом новой последовательности.
Python
s = open('24-253.txt').readline()
k = 0
mx = 0
i = 0
while i < len(s) - 2:
if s[i] in 'CDF' and s[i + 2] in 'AO':
k += 1
mx = max(mx, k)
i += 3
elif i > 1 and s[i - 2] in 'CDF' and s[i] in 'AO':
k = 1
i += 1
else:
k = 0
i += 1
print(mx)
PascalABC
var
max, k, i: Integer;
s: String;
f: TEXT;
begin
Assign(f, '24-253.txt');
Reset(f);
Readln(f, s);
k := 0;
max := 0;
i := 1;
while i < s.Length - 1 do
if (s[i] in 'CDF') and (s[i + 2] in 'AO') then
begin
k := k + 1;
if k > max then
max := k;
i := i + 3;
end
else if (i > 2) and (s[i - 2] in 'CDF') and (s[i] in 'AO') then
begin
k := 1;
i := i + 1;
end
else
begin
k := 0;
i := i + 1;
end;
Writeln(max);
end.
C++
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f;
f.open("24-253.txt");
string s, s1 = "CDF", s2 = "AO";
f >> s;
int k = 0, max = 0, i = 0;
while (i < s.length() - 2)
if (s1.find(s[i]) != -1 && s2.find(s[i + 2]) != -1)
{
k++;
if (k > max)
max = k;
i += 3;
}
else if (i > 1 && s1.find(s[i - 2]) != -1 && s2.find(s[i]) != -1)
{
k = 1;
i++;
}
else
{
k = 0;
i++;
}
cout << max << endl;
}
Ответ
6