Первая задачка
я так понял за раз отрубаются как минимум 2 головы, а максимум не ограничен.
CODE
program Gorynych;
var
n, k, Udar: Integer;
Golovy: string; { Ограничение на 255 голов }
i, j, l: Integer;
f: Text;
begin
Assign(f, 'Input.txt'); Reset(f);
ReadLn(f, n, k); ReadLn(f, Golovy);
Close(f);
if (Length(Golovy) < n) and (n > 2) then halt
else Golovy := Copy(Golovy, 1, n);
Assign(f, 'Output.txt'); Rewrite(f);
Udar := 0; i := 1;
WriteLn(f, Udar:3, ' ', Golovy);
while i <= n do begin
j := 1;
if Golovy[i] = '0' then begin {Если встретилась больная голова}
Golovy[i] := '1'; {Текущая отрубается в любом случае}
{Считаем больные головы}
while (i + j <= n) and (Golovy[i + j] = '0') do j := j + 1;
{Если следующая(ие) больные, все отрубаются }
if j > 1 then for l := i + 1 to i + j do Golovy[l] := '1';
{Если следующая здоровая или эта последняя}
if j = 1 then begin
if i + 1 <= n then begin {Если эта не последняя}
Golovy[i + 1] := '0'; {то следующая отрубается}
if i + 1 < n then {Если следующая не последняя}
if Golovy[i + 2] = '1' then {Если послеследующая здоровая}
Golovy[i + 2] := '0' {тоже отрубается}
end else begin {Если эта все-таки последняя голова}
Golovy[i - 1] := '0'; {две предыдущие отрубаются}
Golovy[i - 2] := '0';
j := -2;
end;
end;
Udar := Udar + 1;
WriteLn(f, Udar:3, ' ', Golovy);
end;
i := i + j;
end;
Close(f);
end.