Задача 6053. Источник: Поляков. Задание КИМ 24
Текстовый файл 24-241.txt состоит не более чем из 106 символов и содержит только латинские буквы A, B, C, D, E, F, O. Определите длину самой длинной цепочки символов, которая начинается и заканчивается буквой O, а между двумя последовательными буквами O содержит не более двух букв F и произвольное количество других букв.
Решение
С помощью метода split разобьем строку на подстроки по буквам O и проверим количество букв F в каждой подстроке
Python
s = open('24-241.txt').readline()
mx = 0
for i in s.split('O')[1:-1]:
if i.count('F') < 3:
mx = max(mx, len(i) + 2)
print(mx)
Python однострочное решение
print(max([len(x) + 2 for x in open('24-241.txt').readline().split('O')[1:-1] if x.count('F') < 3]))
PascalABC
function Count(s: String; c: Char): Integer;
var
i: Integer;
begin
result := 0;
for i := 1 to s.Length do
if s[i] = c then
result := result + 1;
end;
var
max: Integer;
s, i: String;
sl: Array of String;
f: TEXT;
begin
Assign(f, '24-241.txt');
Reset(f);
Readln(f, s);
sl := s.Split('O');
max := 0;
foreach i in sl[1:sl.Length - 1] do
if (Count(i, 'F') < 3) and (i.Length + 2 > max) then
max := i.Length + 2;
Writeln(max);
end.
C++
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int count(string s, char c)
{
int n = 0;
for (int i = 0; i < s.length(); i++)
if (s[i] == c)
n++;
return n;
}
vector<string> split(string s, char c)
{
vector<string> r;
int last = -1, cur = s.find(c);
while (cur != -1)
{
r.push_back(s.substr(last + 1, cur - last - 1));
last = cur;
cur = s.find(c, cur + 1);
}
r.push_back(s.substr(last + 1, s.length() - last - 1));
return r;
}
int main()
{
ifstream f;
f.open("24-241.txt");
string s;
f >> s;
vector<string> sl = split(s, 'O');
sl.erase(sl.begin());
sl.erase(sl.end() - 1);
int max = 0;
for (string i : sl)
if (count(i, 'F') < 3 && i.length() + 2 > max)
max = i.length() + 2;
cout << max << endl;
}
Ответ
48