QOJ.ac

QOJ

حد الوقت: 1.0 s حد الذاكرة: 256 MB مجموع النقاط: 100

#16973. 支柱与弹簧

الإحصائيات

支柱(Struts)和弹簧(Springs)是决定当外层窗口大小改变时,屏幕上的矩形窗口如何调整大小或重新定位的装置。窗口占用屏幕上的一个矩形区域,并且它可以包含其他窗口,从而形成窗口的层次结构。当最外层窗口的大小改变时,每个直接被包含的窗口可能会改变位置或大小(基于支柱和弹簧的布局);这些改变随后可能会影响它们所包含的窗口的位置和/或大小。

从概念上讲,支柱是一根固定长度的杆,放置在窗口的水平或垂直边缘之间,或者放置在窗口的边缘与直接外层窗口的对应边缘之间。当支柱连接窗口的垂直边缘(决定宽度)或水平边缘(决定高度)时,该窗口的宽度或高度是固定的。同样,当支柱将窗口的边缘与直接外层窗口的对应边缘连接时,这些边缘之间的距离是固定的。然而,弹簧可以被压缩或拉伸,并且可以用来代替支柱。

除最外层窗口外,每个窗口都关联有六个支柱或弹簧。其中一个连接窗口的垂直边缘(决定宽度),另一个连接窗口的水平边缘(决定高度)。其余四个支柱或弹簧中的每一个,都将窗口的一个边缘与外层窗口的对应边缘相连(即上、下、左、右四个方向)。三个垂直方向的支柱或弹簧的长度之和等于外层窗口的高度;类似地,三个水平方向的支柱或弹簧的长度之和等于外层窗口的宽度。当外层窗口的宽度改变时,连接到该窗口的任何水平弹簧都会按等比例拉伸或压缩,使得支柱和弹簧的新总长度等于新的宽度。外层窗口高度的变化也会发生类似的过程。如果三个垂直或水平组件全部都是支柱,则最上方或最右侧的支柱将分别被有效地替换为弹簧。

你必须编写一个程序,输入一组窗口的初始大小和位置(保证有一个窗口包含所有其他窗口)、支柱和弹簧的布局,以及调整最外层窗口大小的请求,然后针对每次大小调整请求,确定每个窗口修改后的尺寸和位置。

输入格式

输入包含多个测试用例,对应不同的窗口集合。每个测试用例以包含四个整数 nwinnresizeowidthoheight 的一行开始。其中 nwin 是窗口数量(不包括包含所有其他窗口的最外层窗口),nresize 是最外层窗口大小调整请求的数量,owidthoheight 是最外层窗口的初始宽度和高度。

接下来的 nwin 行中,每行包含 10 个非负整数,描述一个窗口。前两个整数给出该窗口左上角相对于最外层窗口左上角的初始 $x$ 和 $y$ 位移。接下来的两个整数给出该窗口的初始宽度和高度。最后六个整数中的每一个要么是 0(表示支柱),要么是 1(表示弹簧)。前两个分别指定连接窗口垂直边缘(宽度)和水平边缘(高度)的是支柱还是弹簧,最后四个分别指定连接窗口与直接外层窗口的顶部(top)、底部(bottom)、左侧(left)和右侧(right)的是支柱还是弹簧。

每个测试用例的最后 nresize 行中,每行给出最外层窗口的新宽度和高度——即一次大小调整操作。对于每一次操作,你的程序必须确定 nwin 个内层窗口中每一个的尺寸和位置。测试数据保证,在每次大小调整操作后,每个支柱和弹簧都具有正整数长度,且不同的窗口边界不会接触。此外,大小调整绝不会导致一个窗口跳入另一个窗口内部。

在一个测试用例中,最多有 100 个窗口和 100 次大小调整操作,且最外层窗口的宽度和高度绝不超过 1,000,000。最后一个测试用例之后是一行四个零。

输出格式

对于测试用例中的每次大小调整操作,首先单起一行打印测试用例编号(从 1 开始),后跟大小调整操作编号(1, 2, ...)。然后,在接下来的 nwin 行中,依次打印由于调整外层窗口大小而导致的该测试用例中每个内层窗口的窗口编号、位置($x$ 和 $y$)以及尺寸(宽度和高度)。每个测试用例中的窗口按其在输入中出现的顺序依次编号(1, 2, ...),并且应按该顺序输出。请遵循样例输出中所示的格式。

样例

样例输入 1

1 1 50 100 
10 10 30 10 1 0 0 0 0 0 
70 150 
2 1 50 100 
10 10 30 10 1 0 0 0 0 0 
10 80 20 10 1 1 0 0 0 0 
70 150 
1 2 60 60 
10 10 20 30 1 0 1 1 1 1 
90 90 
120 120 
0 0 0 0

样例输出 1

Case 1, resize operation 1:
 Window 1, x = 10, y = 60, width = 50, height = 10 
Case 2, resize operation 1:
 Window 1, x = 10, y = 60, width = 50, height = 10 
 Window 2, x = 10, y = 80, width = 40, height = 60 
Case 3, resize operation 1:
 Window 1, x = 15, y = 20, width = 30, height = 30 
Case 3, resize operation 2:
 Window 1, x = 20, y = 30, width = 40, height = 30

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.