【USACO题库】4.4.3 Frame Up重叠的图像

不太好复制,所以用截图


(直接用屏幕截图截的)


这题感觉不会很难,但为什么只有6个人做出来。。。


题意:

有若干个空心的长方形(宽度=1,边长≥3)叠在一起,已知最后的图形,求长方形叠放的顺序。


题解:

因为一个长方形有可能会被其它的长方形所覆盖一部分(不可能完全覆盖),所以我们先在读入时记录下每一个长方形左上角顶点的坐标和右下角顶点的坐标(找最大和最小的坐标)。

之后我们枚举每一个长方形,枚举每一条边。

例如这样一个图:


我们先枚举红色长方形的上边(黄圈),发现未被覆盖。


之后枚举左侧,同样未覆盖。

当我们枚举下侧时,发现被蓝色长方形覆盖了(黑圈)

因为原来属于红色长方形的格子现在是蓝色长方形的格子,所以红色长方形被蓝色长方形所覆盖了。


之后右侧也如此。


之后我们再枚举蓝长方形,发现未被覆盖。


红长方形被蓝长方形所覆盖了,所以红长方形在蓝长方形的下面。

如果长方形的某一部分被其它长方形所覆盖了,那么就用一个数组D[i,j]表示编号为i的长方形被编号为j的长方形所覆盖。


之后估计大多数人都会选择拓扑,我也如此,结果

后来我仔细读题,发现其实答案不止一个。。。


正解:

处理完长方形的覆盖顺序后,我们可以用DFS去求解答案。

因为一开始可能会出现多个长方形为底的情况,所以我们要枚举每一个在最底部的长方形进行DFS。

之后枚举覆盖当前长方形的其它长方形,把这些长方形的出度-1。

如果当前长方形已经处于最顶端。就把当前DFS所产生的方案记录进答案里。

(不知道为什么,每次记录答案都会有重复的,所以要判断当前方案是否与上一个方案相同,如果不同就放进去)

最后转成字母输出。


感觉这道题挺水的,就是有点坑。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值