68 lines
2.3 KiB
Markdown
68 lines
2.3 KiB
Markdown
# P14041 [PAIO 2025] Towers
|
||
|
||
## 题目描述
|
||
|
||
Alice 正在玩一款手机游戏,目标是通过放置炮塔来保护基地免受僵尸侵袭。游戏中的基地用一个 $N \times M$ 的矩阵表示。Alice 可以在不越界的任意格子里放置炮塔。只要每一个 $K \times K$ 的正方形区域内至少有一个炮塔,基地就被视为已受保护。请帮助 Alice 找出一种放置炮塔的方案,使她的基地得到保护。同时,由于她刚开始玩、资金有限,请输出所有可能方案中所需炮塔数量最少的那个。
|
||
|
||
### 实现说明
|
||
|
||
你需要实现如下函数:
|
||
|
||
```cpp
|
||
int32 solve(int32 N, int32 M, int32 K)
|
||
```
|
||
|
||
参数 $N, M, K$ 的含义与上文一致,函数需返回上述要求下的最小炮塔数量。
|
||
|
||
**注意**:函数在一次程序执行过程中最多会被调用多次。
|
||
|
||
## 输入格式
|
||
|
||
无(输入由评测器以函数参数传递)。
|
||
|
||
## 输出格式
|
||
|
||
直接返回 `int` 类型的最小炮塔数量。
|
||
|
||
## 说明/提示
|
||
|
||
### 示例
|
||
|
||
下图中,红色圆圈代表炮塔。
|
||
|
||
考虑调用 `solve(5, 5, 2)`。此时 $N = 5, M = 5, K = 2$,方案如下:
|
||
|
||
::::align{center}
|
||

|
||
::::
|
||
|
||
考虑调用 `solve(7, 8, 3)`。此时 $N = 7, M = 8, K = 3$,方案如下:
|
||
|
||
::::align{center}
|
||

|
||
::::
|
||
|
||
考虑调用 `solve(4, 4, 1)`。此时 $N = M = 4, K = 1$,方案如下:
|
||
|
||
::::align{center}
|
||

|
||
::::
|
||
|
||
### 样例评测器
|
||
|
||
样例评测器会先读入 $T$(调用 `solve` 的次数),接下来 $T$ 行每行给出一组 $N, M, K$,每次调用一次 `solve`。然后输出每次调用 `solve` 的返回值,一行一个。示例输入输出均按此格式出现。
|
||
|
||
### 数据范围
|
||
|
||
* $1 \leq N, M \leq 50$。
|
||
* $1 \leq K \leq \min(N, M)$。
|
||
* 单次程序执行过程中,最多会调用 $5\times10^4$ 次该函数。
|
||
|
||
### 评分规则
|
||
|
||
1. 子任务 $1$($8$ 分):$K=1$。
|
||
2. 子任务 $2$($27$ 分):$K=2$。
|
||
3. 子任务 $3$($31$ 分):$N = M$ 且 $K$ 整除 $N$。
|
||
4. 子任务 $4$($34$ 分):无额外限制。
|
||
|
||
由 ChatGPT 5 翻译 |