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

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

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

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

Решение

С помощью метода split разобьем строку на подстроки по буквам O и проверим количество букв F в каждой подстроке

Python

s = open('24-241.txt').readline()
mx = 0
for i in s.split('O')[1:-1]:
    if i.count('F') < 3:
        mx = max(mx, len(i) + 2)
print(mx)

Python однострочное решение

print(max([len(x) + 2 for x in open('24-241.txt').readline().split('O')[1:-1] if x.count('F') < 3]))

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: String;
    sl: Array of String;
    f: TEXT;
begin
    Assign(f, '24-241.txt');
    Reset(f);
    Readln(f, s);
    sl := s.Split('O');
    max := 0;
    foreach i in sl[1:sl.Length - 1] do
        if (Count(i, 'F') < 3) and (i.Length + 2 > max) then
            max := i.Length + 2;
    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, 'O');
    sl.erase(sl.begin());
    sl.erase(sl.end() - 1);
    int max = 0;
    for (string i : sl)
        if (count(i, 'F') < 3 && i.length() + 2 > max)
                max = i.length() + 2;
    cout << max << endl;
}

Ответ

48

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

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

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

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