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

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

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

Текстовый файл 24-224.txt содержит строку из символов A, B и C, всего не более чем 106 символов. Найдите максимальную длину строки, состоящей только из комбинаций BAC и СAB. Например, в строке BABABACCABCABCB такая подстрока BACCABCAB (длина 9).

Решение

В данной задаче последний символ одной последовательности может являться первым символом следующей последовательности. Анализируем тройки символов. Если встретили одну из указанных троек, текущая последовательность продолжается и смещаемся на три символа. Если последовательность прервалась, проверяем, не является ли последний символ началом новой последовательности. Если новая последовательность не началась, смещаемся на один символ.

Python

  1. s = open('24-224.txt').readline()
  2. mx = 0
  3. k = 0
  4. i = 0
  5. while i < len(s) - 2:
  6. if s[i:i + 3] == 'BAC' or s[i:i + 3] == 'CAB':
  7. k += 3
  8. mx = max(mx, k)
  9. i += 3
  10. elif i > 0 and (s[i - 1:i + 2] == 'BAC' or s[i - 1:i + 2] == 'CAB'):
  11. k = 3
  12. i += 2
  13. else:
  14. k = 0
  15. i += 1
  16. print(mx)

PascalABC

  1. var
  2. k, i, max: Integer;
  3. s: String;
  4. f: TEXT;
  5. begin
  6. Assign(f, '24-224.txt');
  7. Reset(f);
  8. Readln(f, s);
  9. max := 0;
  10. k := 0;
  11. i := 1;
  12. while i <= s.Length - 2 do
  13. if (s[i:i + 3] = 'BAC') or (s[i:i + 3] = 'CAB') then
  14. begin
  15. k := k + 3;
  16. if k > max then
  17. max := k;
  18. i := i + 3;
  19. end
  20. else if (i > 1) and ((s[i - 1:i + 2] = 'BAC') or (s[i - 1:i + 2] = 'CAB')) then
  21. begin
  22. k := 3;
  23. i := i + 2;
  24. end
  25. else
  26. begin
  27. k := 0;
  28. i := i + 1;
  29. end;
  30. Writeln(max);
  31. end.

C++

  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int main()
  5. {
  6. ifstream f;
  7. f.open("24-224.txt");
  8. string s;
  9. f >> s;
  10. int max = 0, k = 0, i = 0;
  11. while (i < s.length() - 2)
  12. if (s.substr(i, 3) == "BAC" || s.substr(i, 3) == "CAB")
  13. {
  14. k += 3;
  15. if (k > max)
  16. max = k;
  17. i += 3;
  18. }
  19. else if (i > 0 && (s.substr(i - 1, 3) == "BAC" || s.substr(i - 1, 3) == "CAB"))
  20. {
  21. k = 3;
  22. i += 2;
  23. }
  24. else
  25. {
  26. k = 0;
  27. i++;
  28. }
  29. cout << max << endl;
  30. }

Ответ

72

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

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

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

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