为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。

USACO/frameup

来自NOCOW
跳转到: 导航, 搜索
 这篇文章可以证实是由NOCOW用户原创,不存在任何版权争议。
 本文作者同意以GNU FDLCC-by-saGNU LGPL(如果适用)三种版权发布此文章(不包括翻译文章中属于原始所有者的部分版权)。
 如果你修改了这篇文章并且不同意用GNU FDL以外的版权发布,可以换一个版权模板或者移除此模板。
这是USACO Chapter 4 .4中的OI题目Frame Up介绍及题解,参见 翻译C语言代码C++语言代码Pascal语言代码


目录

[编辑] 问题分析

[编辑] 方法 拓扑排序

由题意可知,不存在一个矩形的一条边被完全覆盖,所以我们可以计算出矩形的坐标。 读入时记录矩形的每个点中最小x1,最小y1,最大x2,最大y2。可知左上角 (x1,y1) 右下角 (x2,y2) 右上角 (x2,y1) 左下角 (x1,y2)。

查找该矩形A边上,非该矩形的字母B,即覆盖矩形A被矩形B覆盖。建立一条有向边B->A,表示B是A的必要条件。然后进行拓扑排序,搜索求所有的拓扑序列,并排序输出。

注意,该题中的字母可能不连续,不要直接for(i='A';i<='Z';i++)。

[编辑] 方法 字符串处理

每次找到一个完全框(也就是这个框的所有字母都可见,要么是原来的字母,要么是’*’,’*’是后面用到的临时标记),拿掉,把框上的所有字母都标记为’*’。重复上述过程直到所有框都被拿掉。 因为要求输出所有答案,所以用dfs来寻找所有解

[编辑] 范例程序

个人工具