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

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

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

Текстовый файл 24-241.txt состоит не более чем из 106 символов и содержит только латинские буквы A, B, C, D, E, F, O. Определите длину самой длинной цепочки символов, которая начинается и заканчивается буквой F, между двумя последовательными буквами F содержит не менее пяти букв E, а между каждой парой букв E – ровно одну букву A.

Решение

Наиболее простое решение данной задачи через использование метода split. Делим строку на подстроки и анализируем в соответствии с логикой задачи.

Python

s = open('24-241.txt').readline()
mx = 0
for i in s.split('F')[1:-1]:
    if i.count('E') > 4:
        good = True
        for j in i.split('E')[1:-1]:
            if j.count('A') != 1:
                good = False
                break
        if good:
            mx = max(mx, len(i) + 2)
print(mx)

PascalABC

function Count(s: String; c: Char): Integer;
var
    i: Integer;
begin
    result := 0;
    for i := 1 to s.Length do
        if s[i] = c then
            result := result + 1;
end;

var
    max: Integer;
    s, i, j: String;
    sl, se: Array of String;
    good: Boolean;
    f: TEXT;
begin
    Assign(f, '24-241.txt');
    Reset(f);
    Readln(f, s);
    sl := s.Split('F');
    max := 0;
    foreach i in sl[1:sl.Length - 1] do
        if Count(i, 'E') > 4 then
        begin
            good := True;
            se := i.Split('E');
            foreach j in se[1:se.Length - 1] do
                if Count(j, 'A') <> 1 then
                begin
                    good := False;
                    break;
                end;
            if good and (i.Length + 2 > max) then
                max := i.Length + 2;
        end;
    Writeln(max);
end.

C++

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int count(string s, char c)
{
    int n = 0;
    for (int i = 0; i < s.length(); i++)
        if (s[i] == c)
            n++;
    return n;
}

vector<string> split(string s, char c)
{
    vector<string> r;
    int last = -1, cur = s.find(c);
    while (cur != -1)
    {
        r.push_back(s.substr(last + 1, cur - last - 1));
        last = cur;
        cur = s.find(c, cur + 1);
    }
    r.push_back(s.substr(last + 1, s.length() - last - 1));
    return r;
}

int main()
{
    ifstream f;
    f.open("24-241.txt");
    string s;
    f >> s;
    vector<string> sl = split(s, 'F');
    sl.erase(sl.begin());
    sl.erase(sl.end() - 1);
    int max = 0;
    for (string i : sl)
        if (count(i, 'E') > 4)
        {
            bool good = true;
            vector<string> se = split(i, 'E');
            se.erase(se.begin());
            se.erase(se.end() - 1);
            for (string j : se)
                if (count(j, 'A') != 1)
                {
                    good = false;
                    break;
                }
            if (good && i.length() + 2 > max)
                max = i.length() + 2;
        }
    cout << max << endl;
}

Ответ

35

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

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

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

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