Представим куб в виде графа его каркаса. Пронумеруем все вершины куба цифрами от 1 до 8. Задача сводится к обычному обходу в ширину. Для четных N ответ будет 0, т.к. нельзя дойти на противоположную вершину за четное кол-во шагов. ответ будет расти в геометрической прогрессии в зависимости от N. Программа:
var n, i, j, k: integer; a: array[0..100, 1..8] of int64; begin read(n); a[0, 1] := 1; for k := 1 to n do for i := 1 to 8 do for j := 1 to 8 do if m[i, j] = 1 then a[k, i] := a[k, i] + a[k - 1, j]; write(a[n, 8]); end.
begin writeln('Загружаю входные данные...'); t := ''; AssignFile(fileIn, IN_FILENAME); AssignFile(fileOut, OUT_FILENAME); reset(fileIn); while not eof(fileIn) do begin readln(fileIn, s); if (s = '0') then break else t := t + s; end; CloseFile(fileIn); rewrite(fileOut); writeln(fileOut, Length(t)); CloseFile(fileOut); end.
const
m: array[1..8, 1..8] of byte =
((0, 1, 1, 1, 0, 0, 0, 0),
(1, 0, 0, 0, 1, 0, 1, 0),
(1, 0, 0, 0, 1, 1, 0, 0),
(1, 0, 0, 0, 0, 1, 1, 0),
(0, 1, 1, 0, 0, 0, 0, 1),
(0, 0, 1, 1, 0, 0, 0, 1),
(0, 1, 0, 1, 0, 0, 0, 1),
(0, 0, 0, 0, 1, 1, 1, 0));
var
n, i, j, k: integer;
a: array[0..100, 1..8] of int64;
begin
read(n);
a[0, 1] := 1;
for k := 1 to n do
for i := 1 to 8 do
for j := 1 to 8 do
if m[i, j] = 1 then
a[k, i] := a[k, i] + a[k - 1, j];
write(a[n, 8]);
end.
const
IN_FILENAME = 'INPUT.txt';
OUT_FILENAME = 'OUTPUT.txt';
var
fileIn,fileOut: TextFile;
s,t: string;
begin
writeln('Загружаю входные данные...');
t := '';
AssignFile(fileIn, IN_FILENAME);
AssignFile(fileOut, OUT_FILENAME);
reset(fileIn);
while not eof(fileIn) do
begin
readln(fileIn, s);
if (s = '0') then
break
else
t := t + s;
end;
CloseFile(fileIn);
rewrite(fileOut);
writeln(fileOut, Length(t));
CloseFile(fileOut);
end.