首页 > 试题广场 >

爱丽丝的人偶剧场管理

[编程题]爱丽丝的人偶剧场管理
  • 热度指数:110 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
人偶师爱丽丝正在布置一场人偶剧。她在舞台(屏幕)上划分了若干个矩形区域作为不同人偶的活动范围,并称之为“窗口”。
舞台是一个左上角坐标为 latex,右下角坐标为 latex 的矩形区域。每个窗口具有唯一的名称、位置 latex、尺寸 latex 以及层级 latex
窗口之间的遮挡关系遵循以下优先级:
1. 层级优先latex 较大的窗口位于 latex 较小的窗口之上。
2. 时序次之:若两个窗口 latex 相同,则后创建(操作序列中位置靠后)的窗口位于先创建的窗口之上。
一个窗口的可见部分定义为:该窗口在舞台边界 latex 之内,且未被任何优先级更高的窗口遮挡的区域。若一个窗口的可见部分面积大于 latex,则称该窗口是可见的。
爱丽丝需要你实现一个系统,处理一系列对舞台和窗口的操作。

输入描述:
输入包含若干行,每行一个操作。操作总数不超过 latex 个。
所有坐标、宽度、高度均为 latex 位带符号整数。窗口名称仅包含英文字母且不含空格。
1. `init W H`:初始化舞台大小为 latex。若 latexlatex,初始化失败返回 `false`;否则返回 `true`。若初始化失败,后续将无任何操作。
2. `createWindow name x y w h level` 或 `createWindow name x y size level`:创建一个窗口。
- 若参数为 latex 个整数,则宽度为 latex,高度为 latex
- 若参数为 latex 个整数,则宽度和高度均为 latex
- 若 latex 或名称已存在,返回 `false`;否则返回 `true`。
3. `removeWindow name`:移除名称为 `name` 的窗口。若窗口不存在返回 `false`,否则返回 `true`。
4. `resize name newW newH`:将指定窗口的尺寸更改为 latex。若窗口不存在或 latex,返回 `false`,否则返回 `true`。
5. `move name newX newY`:将指定窗口的左上角移动至 latex。若窗口不存在返回 `false`,否则返回 `true`。
6. `queryVisibility name`:查询窗口 `name` 是否可见。可见返回 `true`,否则(或窗口不存在)返回 `false`。
7. `queryAllVisibleWindows x y w h`:在指定的矩形区域 latex 内,按优先级从高到低列出所有可见面积大于 latex 的窗口名称。
- 排序规则:首先按 latex 降序排列,若 latex 相同按名称的字典序升序排列。
- 输出格式:名称之间用分号 `;` 分隔。若区域内无可见窗口,输出 `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` 创建了 latex 的舞台。
2. `window1`, `window2`, `window3` 相继被成功创建。
3. `window2` 被成功移除;移除不存在的 `window4` 失败返回 `false`。
4. `window1` 虽然被 `window3` 部分遮挡,但仍有剩余可见面积,故返回 `true`。
5. 在查询区域 latex 中,`window3` 和 `window1` 均有可见部分。由于 `window3` 的 latex 大于 `window1` 的 latex,故先输出 `window3`。
和华为原题不一样,原题用栈之类的来解决网页前进后退,这个题没有参考意义。
话说回来我做了这么多套卷子我求牛客不要大幅度改动原题了,但凡大幅度改动原题的要么就是无意义,要么就是题目都没有说清楚(参考卷轴咒语能量那个题)。
我居然还昏头了写了两个小时,我只能说判断可见和整理可见的窗口那两个命令太难实现了,最终才过了一半。而且除了遍历每一个窗口检查遮挡情况之外没有方便的方法。
发表于 2026-04-22 00:00:04 回复(1)
从来没见过这么恶心的题,写了两个小时,中途还复用了不少函数还是超内存了
发表于 2026-04-28 15:19:41 回复(0)
1
发表于 2026-04-22 07:21:12 回复(1)