Задание 24. Информатика. ЕГЭ. Шастин. 6.11.2024

Просмотры: 125
Изменено: 24 ноября 2024

(Л. Шастин) Текстовый файл состоит не более чем из \(10^8\) символов латиницы, входящих в слово «REVOLUTION». Найдите наименьшую длину подстроки, которая включает в себя подпоследовательность символов, образующих слово «LOVE». Например, для строки REVVVLAAORRVEARRLBOLRVER ответом будет являться число \(7\) — это длина подстроки LBOLRVE. Для выполнения этого задания следует написать программу.

Файл с данными

Решение:

Python 3.10+


base = ''
s = open(base + '24.txt').readline().strip()

lpos = []
opos = []
vpos = []
epos = []

for i, c in enumerate(s):
    match c:
        case 'L':
            lpos.append(i)
        case 'O':
            opos.append(i)
        case 'V':
            vpos.append(i)
        case 'E':
            epos.append(i)

llen, olen, vlen, elen = len(lpos), len(opos), len(vpos), len(epos)
l, o, v, e = 0, 0, 0, 0

while opos[o] < lpos[l]:
    o += 1
while vpos[v] < opos[o]:
    v += 1
while epos[e] < vpos[v]:
    e += 1
size = epos[e] - lpos[l] + 1

while l < llen and o < olen and v < vlen and e < elen:
    l += 1
    while l < llen and o < olen and opos[o] < lpos[l]:
        o += 1
    while o < olen and v < vlen and vpos[v] < opos[o]:
        v += 1
    while v < vlen and e < elen and  epos[e] < vpos[v]:
        e += 1
    if l < llen and o < olen and v < vlen and e < elen:
        size = min(size, epos[e] - lpos[l] + 1)
print(size)

Ответ: \(2000031\)