| 题目名称 | 4281. [THUPC 2025 Final] 食堂 |
|---|---|
| 输入输出 | thupc_2025_dining.in/out |
| 难度等级 | ★★★☆ |
| 时间限制 | 4000 ms (4 s) |
| 内存限制 | 1024 MiB |
| 测试数据 | 100 |
| 题目来源 |
|
| 开放分组 | 全部用户 |
| 提交状态 | |
| 分类标签 | |
| 查看题解 | 分享题解 |
| 通过:1, 提交:2, 通过率:50% | ||||
|
|
100 | 121.057 s | 99.58 MiB | C++ |
|
|
94 | 121.576 s | 99.57 MiB | C++ |
| 关于 食堂 的近10条评论(全部评论) |
|---|
thupc_2025_dining.in
输出文件:thupc_2025_dining.out
简单对比……所以为什么会有两道食堂题?
有一个位于第一象限的食堂。
食堂被划分为若干个 $1\times 1$ 的区域,区域 $(x,y)$ 为以 $(x,y),(x,y+1),(x+1,y),(x+1,y+1)$ 为顶点的正方形。称两个区域 $(x_1,y_1)$ 和 $(x_2,y_2)$ 相邻当且仅当 $|x_1-x_2|+|y_1-y_2|=1$。
区域有两种类型,一种是可供顾客自由走动的过道,另一种是可供顾客坐下用餐的座位。食堂里的座位非常多,而且排布得很有规律:所有满足 $x\bmod 3\ne 0$ 且 $y\bmod 3\ne 0$ 的区域 $(x,y)$ 是座位,其他区域都是过道。四个相连的座位构成一张餐桌。
从上空俯瞰,食堂中座位的排布方式如下图:
在过道上,顾客可以自由移动。具体地,如果顾客当前位于过道 $(x,y)$,他可以走一步,移动到相邻的区域。如果顾客移动到了座位,他就会在此坐下。
顾客对座位的偏好可以用容忍度 $o\in\{0,1,2\}$ 来描述,其中:
当一个顾客坐下之后,他就会专注地吃饭,就算有其他顾客出现,导致当前的座位变成他不愿意坐的座位,他也不会因此离开。
最开始的时候,餐厅里一个顾客也没有。接下来依次发生了 $q$ 个事件,每个事件是以下两种之一:
第二种事件:座位 $(x,y)$ 的状态发生了变化,如果原来有顾客坐在这里,这个顾客会立刻离开餐厅;如果原来这个座位上没有顾客,则会出现一个顾客坐在这里。
你需要对于第一种事件求出顾客选择的座位,对于第二种事件求出是有人离开还是有人坐下。
第一行一个正整数 $q\ (1\le q\le5\times10^5)$。
接下来 $q$ 行,每行先是一个整数 $t\in\{1,2\}$,表示事件种类。
当 $t=1$ 时,接下来读入一个整数 $o\in\{0,1,2\}$,表示来了一位容忍度为 $o$ 的顾客。
当 $t=2$ 时,接下来读入两个正整数 $x,y\ (1\le x,y\le10^4)$,满足 $x\bmod3\in\{1,2\}$ 与 $y\bmod3\in\{1,2\}$,表示座位 $(x,y)$ 的状态发生了变化。
对每个操作输出一行。
out,否则输出 in。
10 1 0 1 0 2 1 1 2 2 2 1 0 1 1 1 2 1 2 1 2 1 1
1 1 1 4 out in 4 1 1 1 1 2 2 1 1 5 1 7
以下图片展示了每一步操作影响的位置。数字标识了操作的编号。