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

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

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

(В. Петров) Текстовый файл 24-250.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита и точки. Определите минимальное количество идущих подряд символов, среди которых ровно семь точек.

Решение

Создадим массив из шести элементов, где будем сохранять позиции последних шести точек. Встретив седьмую точку, анализируем длину строки на возможный минимум и обновляем содержимое массива позиций. В решении на PascalABC используется динамический массив и срезы, а в решении на C++ - vector, но возможно и решение на основе статического массива с переносом значений в цикле. Пример подобного решения можно посмотреть в задаче 6674.

Python

s = open('24-250.txt').readline()
mn = len(s)
last = [-1] * 6
for i in range(len(s)):
    if s[i] == '.':
        if last[0] != -1:
            mn = min(mn, i - last[0] + 1)
        del last[0]
        last.append(i)
print(mn)

PascalABC

var
    i, min: Integer;
    s: String;
    last: Array of Integer := ArrFill(6, 0);
    f: TEXT;
begin
    Assign(f, '24-250.txt');
    Reset(f);
    Readln(f, s);
    min := s.Length;
    for i := 1 to s.Length do
        if s[i] = '.' then
        begin
            if (last[0] <> 0) and (i - last[0] + 1 < min) then
                min := i - last[0] + 1;
            last := last[1:] + Arr(i);
        end;
    Writeln(min);
end.

C++

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
    ifstream f;
    f.open("24-250.txt");
    string s;
    f >> s;
    int min = s.length();
    vector<int> last;
    for (int i = 0; i < 6; i++)
        last.push_back(-1);
    for (int i = 0; i < s.length(); i++)
        if (s[i] == '.')
        {
            if (last[0] != -1 && i - last[0] + 1 < min)
                min = i - last[0] + 1;
            last.erase(last.begin());
            last.push_back(i);
        }
    cout << min << endl;
}

Ответ

16

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

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

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

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