人偶师爱丽丝正在布置一场人偶剧。她在舞台(屏幕)上划分了若干个矩形区域作为不同人偶的活动范围,并称之为“窗口”。 舞台是一个左上角坐标为 ,右下角坐标为 的矩形区域。每个窗口具有唯一的名称、位置 、尺寸 以及层级 。 窗口之间的遮挡关系遵循以下优先级: 1. 层级优先: 较大的窗口位于 较小的窗口之上。 2. 时序次之:若两个窗口 相同,则后创建(操作序列中位置靠后)的窗口位于先创建的窗口之上。 一个窗口的可见部分定义为:该窗口在舞台边界 之内,且未被任何优先级更高的窗口遮挡的区域。若一个窗口的可见部分面积大于 ,则称该窗口是可见的。 爱丽丝需要你实现一个系统,处理一系列对舞台和窗口的操作。
输入描述:
输入包含若干行,每行一个操作。操作总数不超过 个。 所有坐标、宽度、高度均为 位带符号整数。窗口名称仅包含英文字母且不含空格。 1. `init W H`:初始化舞台大小为 。若 或 ,初始化失败返回 `false`;否则返回 `true`。若初始化失败,后续将无任何操作。 2. `createWindow name x y w h level` 或 `createWindow name x y size level`:创建一个窗口。 - 若参数为 个整数,则宽度为 ,高度为 。 - 若参数为 个整数,则宽度和高度均为 。 - 若 或名称已存在,返回 `false`;否则返回 `true`。 3. `removeWindow name`:移除名称为 `name` 的窗口。若窗口不存在返回 `false`,否则返回 `true`。 4. `resize name newW newH`:将指定窗口的尺寸更改为 。若窗口不存在或 ,返回 `false`,否则返回 `true`。 5. `move name newX newY`:将指定窗口的左上角移动至 。若窗口不存在返回 `false`,否则返回 `true`。 6. `queryVisibility name`:查询窗口 `name` 是否可见。可见返回 `true`,否则(或窗口不存在)返回 `false`。 7. `queryAllVisibleWindows x y w h`:在指定的矩形区域 内,按优先级从高到低列出所有可见面积大于 的窗口名称。 - 排序规则:首先按 降序排列,若 相同按名称的字典序升序排列。 - 输出格式:名称之间用分号 `;` 分隔。若区域内无可见窗口,输出 `NoVisibleWindow`。
输出描述:
对每个操作,输出其对应的返回值(`true`、`false` 或字符串)并换行。
示例1
输入
init 200 300
createWindow window1 10 10 100 100 1
createWindow window2 20 20 40 30 2
createWindow window3 70 90 50 3
removeWindow window2
removeWindow window4
queryVisibility window1
queryAllVisibleWindows 10 10 100 100
输出
true
true
true
true
true
false
true
window3;window1
说明
1. `init 200 300` 创建了

的舞台。
2. `window1`, `window2`, `window3` 相继被成功创建。
3. `window2` 被成功移除;移除不存在的 `window4` 失败返回 `false`。
4. `window1` 虽然被 `window3` 部分遮挡,但仍有剩余可见面积,故返回 `true`。
5. 在查询区域

中,`window3` 和 `window1` 均有可见部分。由于 `window3` 的

大于 `window1` 的

,故先输出 `window3`。
加载中...