资讯动态

GESP 2025年9月 排兵布阵 题解|这题枚举的坑一定要避开

发布时间:2026/10/26 16:20:39 来源:尧图企业网站定制
今天继续刷 GESP 2025年9月 的真题。这道枚举题属于「思路简单但细节多」的类型很多同学代码写完了却过不了问题基本都出在下面要讲的几个点上。题目来源ACGO A94971 2025年9月 四级赛事场次2025年9月 四级一、题目信息题目名称排兵布阵赛事场次2025年9月 四级难度定位四级涉及知识点枚举题目链接https://www.acgo.cn/problemset/info/94971坑点无数人 WA 的核心枚举范围的确定如何用循环穷举全部可能。题意简述作为将军你自然需要合理地排兵布阵。地图可以视为 n 行 m 列的网格适合排兵的网格以 1 标注不适合排兵的网格以 0 标注。现在你需要在地图上选择一个矩形区域排兵这个矩形区域内不能包含不适合排兵的网格。请问可选择的矩形区域最多能包含多少网格前置知识下面先把需要的基础知识理一遍不熟悉的朋友可以跟着看熟悉的直接跳过。枚举的思路把所有可能的情况逐个试一遍在数据范围允许的前提下这是最稳妥的做法。关键是确定枚举的范围和顺序避免重复或漏解。二、思路分析先看清楚题目要我们做什么把题目读两遍我们提取出关键信息输入是什么、要输出什么、有哪些约束条件。这道题考查的是枚举属于这类题里比较基础的一道把题目要求一步步翻译成代码逻辑就能解决。解题步骤拆解按题目要求读入全部输入数据。按题意逐项处理这一步是核心要保证每一步都对应题目里的一句话。按题目规定的格式输出结果。需要说明的是上面这个思路是把题目要求直译成代码得到的没有用到什么高级技巧。对于这类基础题读准题意加写对边界比追求巧妙解法更重要因为考试里这种题是必须拿满分的。三、完整代码 逐行注释#include algorithm #include cstdio using namespace std; const int N 15; int n, m; int a[N][N]; int ans; int main() { scanf(%d%d, n, m); for (int i 1; i n; i) // 遍历 for (int j 1; j m; j) scanf(%d, a[i][j]); // 遍历 for (int u 1; u n; u) // 遍历 for (int l 1; l m; l) // 遍历 for (int d u; d n; d) { // 遍历 int chk 1; for (int r l; r m; r) { // 遍历 for (int x u; x d; x) chk a[x][r]; // 遍历 if (!chk) break; // 判断 ans max(ans, (r - l 1) * (d - u 1)); } } printf(%d\n, ans); return 0; }四、代码分段拆解为了看得更清楚我们把代码按功能分成几段解释。第一步引入头文件#include algorithm #include cstdio using namespace std;#include iostream提供输入输出功能using namespace std;让我们能直接写cin、cout而不用加前缀。这两行是几乎所有 C 程序的开头照写即可。第二步读入数据scanf(%d%d, n, m); for (int j 1; j m; j) scanf(%d, a[i][j]);注意变量的类型要能装下题目的数据。数据可能超过 21 亿时要改用long long。第三步核心处理逻辑for (int i 1; i n; i) for (int u 1; u n; u) for (int l 1; l m; l) for (int d u; d n; d) {这一段是整道题的关键也是枚举的体现。看循环的三个要素从哪里开始、什么时候结束、每次怎么变化。这三个要素任何一个写错结果都会不对。第四步按要求输出printf(%d\n, ans);输出格式必须和题目要求的完全一致。很多同学算法完全正确却因为少了一个换行或者空格多寡不对而 WA这种分丢得最可惜。五、实例模拟下面用样例数据走一遍流程你能看到每一步变量是怎么变化的。以题目的第一组样例为例样例输入4 3 0 1 1 1 0 1 0 1 1 1 1 1样例输出4把这份输入代进代码程序会先把数据依次读入然后进入循环逐个判断把满足条件的值累积起来最后按格式输出。建议你对照着代码在纸上走一遍前两次循环确认自己对每一步的理解都和程序一致。题目另外还给了 1 组样例做完之后建议把剩下的样例都跑一遍全部通过再提交能避开大部分边界问题。六、踩坑总结下面是做这道题时最容易出错的地方对照自己的代码检查一下变量类型选错虽然本题范围不大但养成习惯——凡是不确定范围时累加变量一律用long long成本为零但能保命。输出格式不符题目要求输出几行就输出几行行末换行、数字之间的空格都要严格对齐算法对了但格式错了同样判 WA这种分丢得最冤。特殊情况没特判把最小数据、最大数据、答案恰好等于 0 的情况各测一遍。特别是边界输入出题人最喜欢在这里设陷阱。七、知识点拓展这题虽然简单但背后的方法可以推广总结如下本题考查枚举的基本写法这类题在考试中属于必得分项要练到能默写。写完代码后建议自己造几组边界数据测试特别是最小值和最大值。同一知识点在不同场次反复出现把这道题的写法吃透后面遇到同类题可以直接套用。八、适用人群如果你已经掌握枚举的基本写法这道题可以用来巩固手感。这道题就讲到这里。我会持续更新各场次真题的详细拆解需要系统复习的同学可以关注这个系列。有问题欢迎评论区讨论。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑