📄 ac1186.pas
字号:
program tju1186;
type
pointer=^cube;
cube=record s,e:array[1..3]of integer;next:pointer;end;
var
n,i,x,y,z,r,ans:longint;
a,b,c,t:pointer;
procedure cut;
var
i:byte;
begin
for i:=1 to 3 do
if (a^.s[i]>=b^.e[i]) or (a^.e[i]<=b^.s[i]) then begin
new(t);t^:=b^;t^.next:=c;c:=t;
exit;
end;
for i:=1 to 3 do begin
if (a^.s[i]>b^.s[i]) and (a^.s[i]<b^.e[i]) then begin
new(t);t^:=b^;t^.e[i]:=a^.s[i];t^.next:=c;c:=t;
b^.s[i]:=a^.s[i];
end;
if (a^.e[i]>b^.s[i]) and (a^.e[i]<b^.e[i]) then begin
new(t);t^:=b^;t^.s[i]:=a^.e[i];t^.next:=c;c:=t;
b^.e[i]:=a^.e[i];
end;
end;
end;
begin
repeat
read(n);b:=nil;
for i:=1 to n do begin
read(x,y,z,r);new(a);with a^ do begin
s[1]:=x-r;e[1]:=x+r;s[2]:=y-r;e[2]:=y+r;s[3]:=z-r;e[3]:=z+r;
end;
c:=nil;
while b<>nil do begin
cut;
t:=b;b:=b^.next;dispose(t);
end;
b:=a;b^.next:=c;
end;
ans:=0;
while b<>nil do begin
inc(ans,(b^.e[1]-b^.s[1])*(b^.e[2]-b^.s[2])*(b^.e[3]-b^.s[3]));
t:=b;b:=b^.next;dispose(t);
end;
writeln(ans);
until seekeof;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -