(№ 8004) Текстовый файл 24-320.txt состоит не боле...
बनाया गया: 4 अक्तूबर 2025
का उपयोग करके उत्तर दिया गया GPT-5 Thinking द्वारा Chat01
बनाया गया: 4 अक्तूबर 2025
का उपयोग करके उत्तर दिया गया GPT-5 Thinking द्वारा Chat01
(№ 8004) Текстовый файл 24-320.txt состоит не более чем из 106 символов и содержит только десятичные цифры и знаки равенства («=»).
Определите максимальную длину последовательности вида «число1=число2=число3=...=число N»,
в которой нет соседних знаков «=» и есть хотя бы одно десятизначное число, сумма цифр которого является квадратом целого числа.
В ответе укажите количество символов
(№ 8004) Текстовый файл 24-320.txt состоит не более чем из 106 символов и содержит только десятичные цифры и знаки равенства («=»).
Определите максимальную длину последовательности вида «число1=число2=число3=...=число N»,
в которой нет соседних знаков «=» и есть хотя бы одно десятизначное число, сумма цифр которого является квадратом целого числа.
В ответе укажите количество символов
Похоже, у вас из набора задач ЕГЭ/ОГЭ по строкам. Чтобы получить число символов искомой максимальной подстроки, достаточно пройти файл один раз, беря только цепочки, где числа разделены ровно одним =
(то есть не встречается ==
), и внутри такой цепочки есть хотя бы одно число из ровно 10 цифр, сумма цифр которого — квадрат целого (0, 1, 4, 9, 16, …, 81).
Вот надёжное решение на Python (O(n) по длине файла). Скопируйте рядом с программой файл 24-320.txt
и запустите:
python# coding: utf-8 # Решает задачу №8004 для файла 24-320.txt def solve(path: str = '24-320.txt') -> int: s = open(path, 'r', encoding='utf-8', errors='ignore').read() n = len(s) squares = {i*i for i in range(10)} # 0..81 best = 0 cur_len = 0 has_good10 = False i = 0 while i < n: # пропускаем любые '=' между цепочками и сбрасываем состояние if s[i] == '=': while i < n and s[i] == '=': i += 1 cur_len = 0 has_good10 = False continue # читаем число (непустую последовательность цифр) j = i while j < n and '0' <= s[j] <= '9': j += 1 num_len = j - i cur_len += num_len if num_len == 10: # сумма цифр и проверка на квадрат sm = 0 for ch in s[i:j]: sm += ord(ch) - 48 if sm in squares: has_good10 = True # считаем длину следующей пачки '=' k = j while k < n and s[k] == '=': k += 1 eq_run = k - j if eq_run == 1 and k < n and '0' <= s[k] <= '9': # продолжаем цепочку: прибавляем один '=' и идём к следующему числу cur_len += 1 i = k else: # цепочка закончилась на этом числе if has_good10 and cur_len > best: best = cur_len # сбрасываем и перескакиваем через пачку '=' (если она была) cur_len = 0 has_good10 = False i = k # на случай, если строка закончилась сразу после числа # (выше мы уже учитываем этот случай, но оставим как гарантию) # best = max(best, cur_len) # не нужен, т.к. учли в ветке eq_run != 1 return best if __name__ == '__main__': print(solve())
Что делает код:
число(=число)*
, прерывая их всякий раз, когда встречается ==
или конец строки.цифры
+ одиночные =
).Запустите — на экран выведется искомое количество символов. Если хотите, прикрепите сюда 24-320.txt
, и я сразу посчитаю результат этим кодом.