Нам важно однозначное разбиение, поэтому вариант "00" не подходит, так как его можно спутать с буквой "Б". Другие значение проверим при дерева.
1. Пусть буква "Г" будет записана в первую ветку (1). Распишем ее.
Первой ветке подходит буква "В", так как код начинается с единицы. Рисуем еще ветку, также с единицей и нулем. Получается, что "В" пойдет во вторую ветку (0), а "Г", соответственно, в первую. Итого получаем: В = 10, Г = 11.
2) Пусть "Г" будет во второй ветке (0). С нуля начинаются буквы "А" и "Б", поэтому их тоже пишем. Рисуем еще две ветки. Так как А = 01, то она пойдет в первую ветку, буквы "Б" и "Г" пишем во вторую. "Б" = 000, поэтому пишем во вторую ветку, следовательно, "Г" пойдет в первую. Итого: А = 01, Б = 000, Г = 001.
Теперь сравним полученные значения. Переведем их в десятичную систему счисления.
11₂ = 1*2¹ + 1*2⁰ = 2 + 1 = 3₁₀.
001₂ = 1*0² + 1*0¹ + 1*2⁰ = 0 + 0 + 1 = 1₁₀.
В итоге, значение 001 является минимальным и соответствует однозначному декодированию.
ответ: 001.
Решение смотри во вложении.
i, j, k : integer;
a : array [0..9,0..9] of char;
procedure U(i,j:integer);
var c : char;
begin
c:=a[i,j]; a[i,j]:=' ';
if (c='W')and(a[i+1,j]='B') then U(i+1,j);
if (c='B')and(a[i+1,j]='W') then U(i+1,j);
if (c='W')and(a[i-1,j]='B') then U(i-1,j);
if (c='B')and(a[i-1,j]='W') then U(i-1,j);
if (c='W')and(a[i,j+1]='B') then U(i,j+1);
if (c='B')and(a[i,j+1]='W') then U(i,j+1);
if (c='W')and(a[i,j-1]='B') then U(i,j-1);
if (c='B')and(a[i,j-1]='W') then U(i,j-1);
end;
begin
assign(input,'input.txt');
reset(input);
assign(output,'output.txt');
rewrite(output);
for i:=1 to 8 do begin for j:=1 to 8 do
read(a[i,j]);
readln
end;
for i:=1 to 8 do
begin
a[0,i]:=' '; a[9,i]:=' '; a[i,0]:=' '; a[i,9]:=' '
end;
k:=0;
for i:=1 to 8 do
for j:=1 to 8 do
if a[i,j]<>' ' then
begin
k:=k+1; U(i,j)
end;
write(k);
close(output)
end.