尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

11.2 每日一题 赦免战俘

11.2 每日一题 赦免战俘
📅 发布时间:2026/6/19 19:34:07

本题要求将一个矩阵分为四个子矩阵,在将四个子矩阵不断继续分成个子矩阵,直到无法分出,并且每次对左上角的矩阵进行处理。
本题可用dfs对矩阵不断进行划分

屏幕截图 2025-11-02 181511

如图所示,我们的目标为对每次划分出来的矩阵的左上角进行处理(赦免作弊者)

屏幕截图 2025-11-02 181825

那么应该如何进行划分并对每一个矩阵进行处理呢?
这里我们可以构造一个dfs函数进行处理, 代码如下:
void dfs(int x1, int y1, int x2, int y2){ int Hx=(x2-x1)/2+x1; int Hy=(y2-y1)/2+y1; for(int i=x1; i<Hx; i++) for(int j=y1; j<Hy; j++) a[i][j]=0; if(Hx>x1){ dfs(x1, Hy, Hx, y2); dfs(Hx, y1, x2, Hy); dfs(Hx, Hy, x2, y2); } }
首先该函数传入的四个参数分别为一个矩阵当中横竖坐标的起始点和横竖坐标的终点,即从第几行第几列。

屏幕截图 2025-11-02 185738

由于题目要求每个子矩阵的边长为原矩阵的一半,所以我们定义Hx, Hy分别表示把该矩阵的边长划分为一半的那一列。
我们以0为起始点, 即第1行第1列开始, 到边长为一半的点结束, 即第Hx-1行第Hy-1列(注意数组下标是从0开始的),
利用双重for循环,将这个子矩阵(即左上角的子矩阵)的1全部替换为0(赦免作弊者)。

接下来我们将递归调用dfs函数对另外3个矩阵进行处理,当然要先判断是否还继续分出四个矩阵来。
我们可以注意到,当Hx=x1, 即起始点与终点重合时,当前矩阵仅剩1个数,并不会执行for循环的操作。
此时无需再递归调用dfs函数,即当前矩阵的可赦免作弊者已全部赦免。
所以我们在递归调用前需判断Hx是否大于x1,由于矩阵是正方形边长一样,所以不需要额外再判断Hy是否大于y1.

接下来我们可以根据分出来的四个子矩阵的横竖坐标起始点和终点,
将右上角,左下角,右下角的子矩阵分别传入dfs函数进行处理,即可将可赦免作弊者全部赦免(1替换为0)。

完整代码如下:
`#include
using namespace std;
int n;

//2^10=1024 数组开大一些以确保安全
int a[1100][1100];

//快速幂(不会的可以直接用pow函数)
int pmi(int x, int k){
int res=1;
while(k>0){
if(k&1) res=x;
k>>=1;
x
=x;
}
return res;
}

//dfs深度搜索,查找所有可以被赦免的作弊者
void dfs(int x1, int y1, int x2, int y2){
//求出可被赦免的矩阵范围
int Hx=(x2-x1)/2+x1;
int Hy=(y2-y1)/2+y1;

//赦免作弊者
for(int i=x1; i<Hx; i++)
for(int j=y1; j<Hy; j++)
a[i][j]=0;

//判断是否可以继续分出四个子矩阵
if(Hx>x1){
//递归处理另外3个矩阵
//处理右上角
dfs(x1, Hy, Hx, y2);

  //处理左下角dfs(Hx, y1, x2, Hy);//处理右下角dfs(Hx, Hy, x2, y2);
}

}

int main(){
cin>>n;
//求矩阵边长
int len=pmi(2, n);

//将矩阵中所有数初始化为1
for(int i=0; i<len; i++)for(int j=0; j<len; j++)a[i][j]=1;//将整个矩阵传入dfs当中进行处理
dfs(0, 0, len, len);//输出答案
for(int i=0; i<len; i++){for(int j=0; j<len; j++){cout<<a[i][j];j<len-1?cout<<' ':cout<<'\n';}
}
return 0;

}`

相关新闻

  • 【题解】CCPC 2024 Jinan Site [J] Temperance
  • 原来求凸包这么简单
  • 2025 年 11 月全自动激光去毛刺机,金属件去毛刺机,自动去毛刺机厂家最新推荐,精准检测与稳定性能深度解析!

最新新闻

  • 2026昆山防水补漏服务商适配指南:昆山鼎壹万防水补漏公司及本地优质服务商深度解析 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 打造你的“开发战斗机”:VS Code 扩展推荐指南(从入门到入土版)
  • NSK高速精密滚珠丝杠PSS1520技术详述
  • 深圳家电维修平台推荐:本地实测较好的几家服务商深度对比——2026年6月最新发布 - 一步到家
  • 2026苏州防水服务商适配指南:昆山鼎壹万防水补漏公司与区域品牌实力深度解析 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • Headroom:让 AI Agent「吃得少、营养好」的开源上下文压缩神器

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号