Отримання знань
дистанційна підтримка освіти школярів
Входные данные
Выходные данные
Пример входных данных
Пример выходных данных
Анализ условия и обсуждение идеи решения
Пример решения на Pascal:
const
ddx:array[0..5] of longint=(0,0,1,-1,0,0);
ddy:array[0..5] of longint=(1,-1,0,0,0,0);
ddz:array[0..5] of longint=(0,0,0,0,1,-1);
type
rec1=record
x,y,z:integer;
end;
var
sp:array[-1..61,-1..61,-1..61] of integer;
lst:array[1..216000] of rec1;
q:array[1..239328] of rec1;
i,j,n,m,k,l,p,h,t,xx,yy,zz:longint;
begin
fillchar(sp,sizeof(sp),255);
repeat
readln(n,m,k,l);
if (n=0) and (m=0) and (k=0) and (l=0) then break;
fillchar(sp,sizeof(sp),0);
for i:=1 to l do
begin
read(p);
with lst[i] do
begin
x:=p mod n;
p:=p div n;
y:=p mod m;
z:=p div m;
sp[x,y,z]:=2;
end;
end;
h:=1;
t:=1;
with q[1] do
begin
x:=-1;
y:=-1;
z:=-1;
end;
while (h <= t) do
begin
with q[h] do
for i:=0 to 5 do
begin
xx:=x+ddx[i];
yy:=y+ddy[i];
zz:=z+ddz[i];
if xx >= -1 then
if yy >= -1 then
if zz >= -1 then
if xx <= n then
if yy <= m then
if zz <= k then
if sp[xx,yy,zz]=0 then
begin
sp[xx,yy,zz]:=1;
inc(t);
with q[t] do
begin
x:=xx;
y:=yy;
z:=zz;
end;
end;
end;
inc(h);
end;
j:=0;
for xx:=0 to n do
for yy:=0 to m do
for zz:=0 to k do
if sp[xx,yy,zz]=2 then
for i:=0 to 5 do
if sp[xx+ddx[i],yy+ddy[i],zz+ddz[i]]=1 then inc(j);
writeln('The number of faces needing shielding is ',j,'.');
until false;
end.
Попередня | Зміст | Наступна |