#P16888. [GKS 2022 #E] Pizza Delivery
[GKS 2022 #E] Pizza Delivery
题目描述
Ada 在一个由 条水平街道和 条垂直街道组成的城市中配送披萨,这些街道分别从北到南、从西到东编号为 到 。网格的左上角交叉点为 。
今天,Ada 需要为 位顾客配送 份披萨,每位顾客各一份。每位顾客住在不同的街道交叉点;第 位顾客住在交叉点 ,并在披萨送达后支付 Ada 枚硬币。
Ada 从披萨餐厅 出发,初始有 枚硬币,并携带 份披萨。她的目标是在 分钟内将所有披萨送达。她可以自由选择城市中的任意路径,只要能在 分钟内将所有披萨分别送到对应的顾客手中,她可以在任何地点结束。在两个相邻的街道交叉点之间行走需要 分钟,而在顾客位置放下披萨不消耗额外时间。需要注意以下额外规则和约束:
- Ada 不得离开网格。
- 没有顾客与 Ada 的出发点位于同一交叉点。
- Ada 可以在任意时刻选择停留在当前位置不移动。
- Ada 到达顾客位置时,也可以选择不送达披萨。
形式化地说,如果 Ada 当前位于交叉点 ( 为从上往下的行号, 为从左往右的列号),她可以选择执行以下任意操作(只要不离开网格):
- 向北移动,到达交叉点 。
- 向东移动,到达交叉点 。
- 向西移动,到达交叉点 。
- 向南移动,到达交叉点 。
- 停留在交叉点 。
:::align{center}
:::
城市设有独特的街道使用收费系统。使用每条街道都需支付通行费,通行费取决于 Ada 当前持有的硬币数量以及她移动的方向。每个基本方向(北、东、西、南)分别定义了通行费函数 ,该函数返回 Ada 沿方向 移动后所拥有的硬币数量,定义如下:
其中 是 Ada 当前持有的硬币数, 是一个运算符, 是一个固定的正整数。允许的运算符有:
- (加法)
- (减法)
- (乘法)
- (整数除法)
例如,我们可以有 ,,,。
这意味着,如果 Ada 向北移动一个街区,她将获得 枚硬币;如果向东移动,她的硬币将翻四倍;如果向西移动,她将失去 枚硬币;如果向南移动,她的硬币将减半。
所有除法均为整数除法,使用向下取整函数。例如,
$$-\frac{1}{4} = \left\lfloor -\frac{1}{4} \right\rfloor = -1.$$注意,Ada 允许持有负数枚硬币。注意,通行费实际上可能反而给 Ada 增加硬币。
请判断 Ada 能否在 分钟内送达所有 份披萨,如果能,则求出 分钟后 Ada 能拥有的最大硬币数。
输入格式
输入的第一行给出测试用例的数量 。接下来有 个测试用例。
每个测试用例的第一行包含 、、、、,分别表示网格大小、需要配送的披萨数量、要求完成配送的分钟数,以及 Ada 的起始交叉点坐标。
接下来的 行分别表示北、东、西、南方向的通行费函数。每行包含运算符 (取值为 、、、 之一)和正整数 。
接下来的 行描述每位顾客。每行包含三个整数 、、,分别表示第 位顾客所在的行号(从上往下)、列号(从左往右),以及配送完成后支付的硬币数。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 为 IMPOSSIBLE(如果无法在 分钟内送达所有披萨),否则输出 分钟后 Ada 能拥有的最大硬币数(可能为负数)。
2
3 0 1 1 2
+ 1
- 2
+ 3
/ 4
3 0 1 2 3
- 2
- 2
- 2
- 2
Case #1: 3
Case #2: 0
3
3 1 3 1 3
+ 4
- 2
* 1
/ 4
1 2 4
2 2 1 1 2
+ 2
+ 3
* 2
* 1
1 1 4
2 2 1
3 1 2 1 3
+ 1
* 1
- 3
/ 4
2 2 2
Case #1: 8
Case #2: IMPOSSIBLE
Case #3: 1
提示
在样例 #1 中,Ada 无需配送任何披萨。Ada 位于交叉点 。在 分钟内,她可以选择向西移动到 ,这样在 处使用向西的通行费函数 ,得到 枚硬币。因此,Ada 在 分钟后最多能拥有 枚硬币。
在样例 #2 中,Ada 无需配送任何披萨。Ada 位于交叉点 。所有方向的通行费函数类似:。如果她朝任何方向移动,最终会得到 枚硬币。对她来说最优策略是停留在原地,结束时拥有 枚硬币。
:::align{center}
:::
在附加样例 #1 中,Ada 从交叉点 出发,初始有 枚硬币。她可以通过以下步骤获得最大硬币数:
- 向西移动到 。使用向西的通行费函数 ,Ada 现有 枚硬币。
- 暂不配送 处的披萨,向南移动到 。使用向南的通行费函数 ,Ada 现有 枚硬币。
- 向北移动到 。使用向北的通行费函数 ,Ada 现有 枚硬币。
- 配送 处的披萨。Ada 获得 枚额外硬币,最终共有 枚硬币。
在附加样例 #2 中,Ada 无法在 分钟内配送 份披萨,因此输出 IMPOSSIBLE。
在附加样例 #3 中,Ada 从交叉点 出发,初始有 枚硬币。她可以通过以下步骤获得最大硬币数:
- 向西移动到 。使用向西的通行费函数 ,Ada 现有 枚硬币。
- 向南移动到 。使用向南的通行费函数 ,Ada 现有 枚硬币。
- 配送 处的披萨。Ada 获得 枚额外硬币,最终共有 枚硬币。
限制条件
。
。
。
。
对于所有 ,。
对于所有 ,。
对于所有 ,。
对于所有 , 是 之一。
保证没有顾客位于 Ada 的起始交叉点,即对于所有 ,有 。
保证每位顾客位于不同的交叉点,即对于所有 且 ,有 。
测试集 1
。
测试集 2
。
翻译由 DeepSeek V4 Pro 完成