Текстовый файл состоит не более чем из \(10^6\) символов и содержит только десятичные цифры и заглавные буквы латинского алфавита. Определите в этом файле последовательность идущих подряд символов, представляющих собой \(12\)-ричную запись максимального числа, кратного \(11.\) В ответе запишите индекс (номер) последнего символа (последней цифры), на которой заканчивается запись этого числа в прилагаемом файле. Нумерация символов в текстовом файле начинается с нуля.
Решение:
Python
from re import finditer
s = open('8120.txt').readline().strip()
nums = []
ml = 0
for g in finditer(r'[1-9AB][0-9AB]+', 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], 12) % 11
for i in range(1, len_ts):
pref[i] = (pref[i-1] + int(ts[i], 12)) % 11
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]) + m - 1)
Ответ: \(1690\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене