8.11 平台

题目

为了进行一种游戏,现决定搭造一些平板,而各个平板的地址已经选定。基于最普遍的认识,没有任何支持物的平板不可能漂浮在空中。说的更精确些,任意一平板的两端必需有支柱或者它在另一块平板上。
你会得到各个平板在坐标系中的坐标(如左下图)。每一块平板的坐标都是由它的高度(与地板间的垂直距离)和它的水平方位(开始和结束)决定的。每个支柱都距它支撑的平板的边缘半个单位(如右下图)。
算出支持所有平板的支柱的总长度。
这里写图片描述

题解

枚举比较
一块平台的支撑柱可以减小,当且仅当
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.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值