P14041 [PAIO 2025] Towers 题解

题目链接

P14041 [PAIO 2025] Towers

题目描述

Alice 正在玩一款手机游戏,目标是通过放置炮塔来保护基地免受僵尸侵袭。游戏中的基地用一个 \(N \times M\) 的矩阵表示。Alice 可以在不越界的任意格子里放置炮塔。只要每一个 \(K \times K\) 的正方形区域内至少有一个炮塔,基地就被视为已受保护。请帮助 Alice 找出一种放置炮塔的方案,使她的基地得到保护。同时,由于她刚开始玩、资金有限,请输出所有可能方案中所需炮塔数量最少的那个。

实现说明

你需要实现如下函数:

int32 solve(int32 N, int32 M, int32 K)

参数 \(N, M, K\) 的含义与上文一致,函数需返回上述要求下的最小炮塔数量。

注意:函数在一次程序执行过程中最多会被调用多次。

输入格式

无(输入由评测器以函数参数传递)。

输出格式

直接返回 int 类型的最小炮塔数量。

说明/提示

示例

下图中,红色圆圈代表炮塔。

考虑调用 solve(5, 5, 2)。此时 \(N = 5, M = 5, K = 2\),方案如下:

![]( https://cdn.luogu.com.cn/upload/image_hosting/85kgzr3z.png?x-oss-process=image/resize ,m_lfit,h_200)

考虑调用 solve(7, 8, 3)。此时 \(N = 7, M = 8, K = 3\),方案如下:

![]( https://cdn.luogu.com.cn/upload/image_hosting/w010zocx.png?x-oss-process=image/resize ,m_lfit,h_200)
考虑调用 solve(4, 4, 1)。此时 \(N = M = 4, K = 1\),方案如下:

![]( https://cdn.luogu.com.cn/upload/image_hosting/yz3aumpi.png?x-oss-process=image/resize ,m_lfit,h_200)

样例评测器

样例评测器会先读入 \(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 翻译

题解

第一篇交互题&题号回文的题解!!!

题意

实现一个 solve(N,M,K) 函数,求出一个 \(N \times M\) 的矩阵中完整的 \(K \times K\) 的正方形的个数最大值

思路

在每一个 \(K \times K\) 的正方形右下角放置炮塔,所以一共有 \((N-(N\) mod \(K)) \times (M-(M\) mod \(K))\) 个炮塔

AC记录

AC代码:

#include<bits/stdc++.h>
using namespace std;
int solve(int N,int M,int K){
  N/=K;
  M/=K;
  return N*M;
}
posted @ 2026-07-11 18:59  huan9178  阅读(12)  评论(0)    收藏  举报