【NOI2004】毕业生

来源:互联网 发布:淘宝详情页逻辑 编辑:程序博客网 时间:2024/04/29 21:23

【问题描述】小Y高中毕业了,等待着他的是四年未知的大学生活,小Y不禁感到既紧张又兴奋。他现在真恨不得马上就开始他的大学生活,但是,在上学之前还是有很多事情要做的,其中很重要的一件事就是收拾行李。小Y有一套钟爱的玩具,这套玩具由很多小的基块组成,每个基块都是由若干厚度一定的单位小正方形块拼成的连通图形,图1就是3个基块的平面图。

由于小Y非常喜欢这套玩具,他决定把它带到大学去。“我可以制作一个矩形的有一定厚度的箱子,然后把我的所有玩具都摆放到这个箱子里。”小Y自言自语道。由于箱子的厚度有限,在摆放的时候基块之间不能重叠。但是可以将基块旋转0度,90度,180度或者270度后再进行摆放,图2就是一种可能的摆放方式。

由于要带走的行李实在是太多了,小Y必须尽量缩小这套玩具所占的体积。“由于箱子的厚度是一定的,我只要适当的摆放这些基块,使得包含它们的矩形面积最小就可以了。”小Y想。但这并不是一个容易的问题,小Y试了很长时间都没有成功,你能帮帮他吗?【输入文件】输入文件graduate1.in到graduate10.in已经放在用户目录中。每个输入文件的第一行都是一个整数n,表示基块的数目。接下来是每个基块的形状描述,共有n个部分,每个部分的第一行是一个整数r,表示包含这个基块的最小矩形纵向上的单位小正方形的个数,接下来r行每行用一个字符串来描述基块的形状,组成该基块的单位小正方形用字符“*”来表示。数据保证每个基块的所有的单位小正方形是四连通的。【输出文件】本题是一道提交答案式的题目,你需要提供十个输出文件从graduate1.out到graduate10.out,放在用户目录中。每个文件的第一行包含两个整数H和W,分别表示包含这些基块的最小矩形的纵向和横向尺寸。接下来的n行,每行包含三个整数k,x和y。k是0,1,2,3四个数中的一个,表示每个基块的旋转角度,0表示不旋转,1表示顺时针旋转90度,2表示顺时针旋转180度,3表示顺时针旋转270度。x和y表示旋转后,包含该基块的最小矩形的左上角方格的坐标,x表示该方格所在的行,y表示该方格所在的列,注意行和列的编号从0开始。【样例输入】33******   ******2**5********【样例输出】4 60 0 11 1 23 0 0【样例说明】基块的摆放方法如图3所示【评分方法】如果你输出的矩形的长或者宽超过500,该测试点0分。如果你输出的方案不合法,即k, x, y的范围不符合题目规定、某个基块超出边界或者基块之间有重叠等,该测试点0分。否则该测试点的得分按如下公式计算

其中,your_area为你输出的矩形的面积,best_area为我们的最优结果。【你如何测试你的输出】我们提供graduate_check这个工具作为测试你的输出文件的办法。使用这个工具的方法是:graduate_check <测试点编号X>在你调用这个文件后,graduate_check将根据输入文件graduateX.in和你给出的输出文件graduateX.out给出测试的结果。检查程序的第一步是读取选手输出并尝试进行放置。程序按照输入文件的顺序依次处理各个块,如果无法按照输出的要求放置,会输出以下信息之一:Error: toy xxx is OUT OF BOARD!Error: toy xxx is overlapping some previously placed toy!第一种信息表示有某个基块超出了边界,第二种信息表示某两个基块有重叠。由于程序对于每个基块只按顺序处理一次,所以只报告与当前已经放置好的基块有重叠的基块。也就是说,第一个基块是不会被报第二种错误的。第一种错误出现时,程序继续,伸出矩形之外的部分不予考虑;第二种错误出现时,程序继续,在重叠的地方以“!”标记。检查程序的第二步是输出放置方案。位于矩形之外的部分不会画出,而重叠的地方用“!”标记。检查程序的最后一步是输出汇总信息,有以下几种可能:Some toys are MISSING...Some toys are OUT OF BOARD...Some toys are overlapping some others...Correct! area = xxx其中第一种信息表示有某个基块缺失,这是因为有基块的坐标x、y至少有一个为负。为了方便选手,本测试程序允许选手只放置部分基块观察结果,坐标中有负数的基块将被忽略,但是这在最后的评分程序中会被视为非法解。特别提示:由于graduate_check输出摆放结果,每行可能会超过80个字符,行数也可能很多,建议采用重定向的方式把输出结果保存为文件,在编辑器中打开分析。命令为:graduate_check <测试点编号X> > result.txt
观察数据,可以发现1~6都可以手算……

1、2两组不用说,是个人都算得出来。

第3组提供拼图方案(不唯一):

第4组数据慢慢弄两下是可以弄出来的。

第5组数据手算实在太有难度,没弄出来。

第6组数据只有4块,而且锯齿也比较吻合。

第7、8、9组数据表示没有办法。

第10组数据是将第3组数据复制400遍得到的。

于是这样大概就可以得到60~70分了。

原创粉丝点击