题目
为了进行一种游戏,现决定搭造一些平板,而各个平板的地址已经选定。基于最普遍的认识,没有任何支持物的平板不可能漂浮在空中。说的更精确些,任意一平板的两端必需有支柱或者它在另一块平板上。
你会得到各个平板在坐标系中的坐标(如左下图)。每一块平板的坐标都是由它的高度(与地板间的垂直距离)和它的水平方位(开始和结束)决定的。每个支柱都距它支撑的平板的边缘半个单位(如右下图)。
算出支持所有平板的支柱的总长度。
题解
枚举比较
一块平台的支撑柱可以减小,当且仅当
1.(x[j]<=x[i])&(y[j]>x[i])
2.(x[j]
时间复杂度O(n2)
代码
var
n,i,j,k,ans:longint;
bx,by:boolean;
h,x,y:array[1..100]of longint;
begin
readln(n);
for i:=1 to n do
begin
readln(h[i],x[i],y[i]);
ans:=ans+h[i]*2;
end;
for i:=1 to n do
for j:=i+1 to n do
if h[i]>h[j] then
begin
k:=h[i];h[i]:=h[j];h[j]:=k;
k:=x[i];x[i]:=x[j];x[j]:=k;
k:=y[i];y[i]:=y[j];y[j]:=k;
end;
for i:=1 to n do
begin
bx:=true;by:=true;
for j:=i-1 downto 1 do
if h[j]<h[i] then
begin
if(x[j]<=x[i])and(y[j]>x[i])and bx then
begin ans:=ans-h[j];bx:=false;end;
if (x[j]<y[i])and(y[j]>=y[i])and by then
begin ans:=ans-h[j];by:=false;end;
if not bx and not by then break;
end;
end;
writeln(ans);
end.