投影(skyline)

题目描述
https://jzoj.net/junior/#main/show/1163

   一天你对着眼前的景物拍了一张照,这个相机很特别,有建筑物的地方显示“X”,没有建筑物的地方显示为“.”,假设每个建筑都是块状的,照片长W(1<=W<=1,000,000),用N(1<=N<=50,000)对平面坐标(x,y)( 1 <= x <= W, 0 <= y <= 500,000)描述照片中建筑物高度发生变化的位置,你的任务是计算出最少需要多少个建筑才能形成该照片。
如下图:

在输入中被描述为: (1,1), (2,2), (5,1), (6,3), (8,1), (11,0), (15,2), (17,3), (20,2), (22,1).这幅图片最少需要6个建筑,下面是用6个建筑形成该照片的例子:


其实跟上次那题WING很像,本该是第一题难度,但是作者把它题目一改,变成第三题了。我在比赛是用的是暴搜,二维数组无法开到1000000×10000000 所以只得了40分,时间超限一个点,就是首先找出所有建筑的阴影,在一个一个找出来,标记上数字就行了。这是暴搜的方法,正解是从头到尾找一遍后面表示高度的那个数,只要不是0就继续找,出现过的就标记一遍,最后输出答案就行了!


[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. for i:=1 to n do  
  2.         begin  
  3.                 if bz[i]=false then  
  4.                 begin  
  5.                         if x[i]<>0 then  
  6.                         begin  
  7.                                 inc(ans);  
  8.                         end;  
  9.                         for j:=i to n do  
  10.                         begin  
  11.                                 if x[i]=x[j] then  
  12.                                 begin  
  13.                                         bz[j]:=true;  
  14.                                 end;  
  15.                                 if x[i]>x[j] then  
  16.                                 begin  
  17.                                         break;  
  18.                                 end;  
  19.                         end;  
  20.                 end;  
  21.         end;  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值