Текстовый файл состоит не более чем из \(10^6\) символов и содержит только десятичные цифры и заглавные буквы латинского алфавита. Определите в этом файле последовательность идущих подряд символов, представляющих собой \(14\)-ричную запись максимального числа, кратного \(5.\) В ответе запишите индекс (номер) первого символа (первой значащей цифры), с которого начинается запись этого числа в прилагаемом файле. Нумерация символов в текстовом файле начинается с нуля.
Решение:
Python
from re import finditer
s = open('8120.txt').readline().strip()
nums = []
ml = 0
for g in finditer(r'[1-9A-D][0-9A-D]+', s):
if len(g.group(0)) < ml:
continue
ts = g.group(0)
len_ts = len(ts)
pref = [0] * len_ts
pref[0] = int(ts[0], 14) % 5
for i in range(1, len_ts):
pref[i] = (pref[i-1] + (-1)**i * int(ts[i], 14)) % 5 #14**1 % 5 = 1 если i чётное, и = -1, если i нечётное
if pref[-1] == 0:
nums.append(ts)
ml = len_ts
else:
s_tmp = set()
for k in range(len_ts - ml):
if ts[k] not in s_tmp:
s_tmp.add(ts[k])
for p in range(len_ts - 1, ml + k, -1):
if pref[p] == pref[k]:
ml = max(ml, p - k)
nums.append(ts[k+1:p+1])
break
m = max(len(d) for d in nums)
nums = sorted([d for d in nums if len(d) == m])
print(s.find(nums[-1]))
Ответ: \(13273\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене