当前位置: 首页 > news >正文

洛谷 U91193:棋盘覆盖问题 ← 分治法

【题目来源】
https://www.luogu.com.cn/problem/U91193

【问题描述】
在一个2^k * 2^k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一
特殊方格。现在用4种不同形状的 L型(占3小格)骨牌覆盖棋盘上除了特殊方格以外的所有方格,且各骨牌不能重叠。 步骤为:将棋盘一分为四,依次处理左上角,右上角,左下角,右下角,递归进行。严格按照这个顺序处理。

例如,一种用不同形状的 L型骨牌覆盖填充的策略如下图所示:

【输入格式 】
输入三个数k,x,y,分别表示棋盘大小,特殊方格位置。

【输出格式】
共2^k行,每行2^k个数,每辆个数中间空格隔开。
输出按照上述顺序所覆盖的棋盘。特殊方格用0表示,其他为骨牌编号。

【算法分析】
应用分治法求解棋盘覆盖问题的技巧在于如何划分棋盘,要求是使划分后的子棋盘的大小相同,从而将原来规模较大的棋盘覆盖问题分解为规模较小的棋盘覆盖问题。
其常用技巧是,当 k>0 时,将 {\color{Red} 2^k\times 2^k} 的棋盘划分为4个 {\color{Red} 2^{k-1}\times 2^{k-1}} 的子棋盘。由于原棋盘只有一个特殊方格,所以这样划分后,这4个子棋盘中只有一个子棋盘包含该特殊方格,其余3个子棋盘中没有特殊方格。然后,用一个L型骨盘覆盖这3个没有特殊方格的子棋盘的会合处,并将这三个子棋盘上被L型骨牌覆盖的方格标记为新的特殊方格。递归地使用这种分割方法,直至棋盘简化为1\times 1 的棋盘,就结束递归。(注意:下图中的红色特殊方格,可以在其所在子棋盘的
任意位置。下图只是示意需要选择的位置。

上图用语言表述为:
◆左上的子棋盘(若不存在特殊方格)----则将该子棋盘
右下角的那个方格假设为特殊方格
◆右上的子棋盘(若不存在特殊方格)----则将该子棋盘
左下角的那个方格假设为特殊方格
◆左下的子棋盘(若不存在特殊方格)----则将该子棋盘
右上角的那个方格假设为特殊方格
◆右下的子棋盘(若不存在特殊方格)----则将该子棋盘
左上角的那个方格假设为特殊方格

【数据范围】
说明/提示:k<=5

【算法代码】

#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;
int ans[maxn][maxn];
int id;void solve(int x1,int y1,int x2,int y2,int sz) {if(sz==1) return;int t=++id;sz/=2;int midx=x1+sz-1;int midy=y1+sz-1;if(x2<=midx && y2<=midy) { //特殊方格在左上部分,继续划分solve(x1,y1,x2,y2,sz);} else {ans[midx][midy]=t; //不在左上,覆盖左上部分的右下角solve(x1,y1,midx,midy,sz); //继续划分}if(x2<=midx && y2>midy) { //特殊方格在右上部分,继续划分solve(x1,y1+sz,x2,y2,sz);} else {ans[midx][midy+1]=t; //不在右上,覆盖右上部分的左下角solve(x1,y1+sz,midx,midy+1,sz); //继续划分}if(x2>midx && y2<=midy) { //特殊方格在左下部分,继续划分solve(x1+sz,y1,x2,y2,sz);} else {ans[midx+1][midy]=t; //不在左下,覆盖左下部分的右上角solve(x1+sz,y1,midx+1,midy,sz); //继续划分}if(x2>midx && y2>midy) { //特殊方格在右下部分,继续划分solve(x1+sz,y1+sz,x2,y2,sz);} else {ans[midx+1][midy+1]=t; //不在右下,覆盖右下部分的左上角solve(x1+sz,y1+sz,midx+1,midy+1,sz); //继续划分}
}int main() {int k,x,y;cin>>k>>x>>y;int size=(1<<k);solve(1,1,x,y,size);for(int i=1; i<=size; i++)for(int j=1; j<=size; j++) {if(j==size) printf("%d\n",ans[i][j]);else printf("%d ",ans[i][j]);}return 0;
}/*
3
1 1
ans:0  3  4  4  8  8  9  93  3  2  4  8  7  7  95  2  2  6 10 10  7 115  5  6  6  1 10 11 11
13 13 14  1  1 18 19 19
13 12 14 14 18 18 17 19
15 12 12 16 20 17 17 21
15 15 16 16 20 20 21 21
*/




【参考文献】
https://blog.csdn.net/ljw_study_in_CSDN/article/details/106409784
https://www.codenong.com/cs105800665/
https://www.cnblogs.com/crx234/p/5988055.html

https://www.cnblogs.com/yanyu01/p/8734212.html
https://blog.csdn.net/scliu12345/article/details/102387130
 

 

相关文章:

洛谷 U91193:棋盘覆盖问题 ← 分治法

【题目来源】https://www.luogu.com.cn/problem/U91193【问题描述】 在一个2^k * 2^k&#xff08;k≥0&#xff09;个方格组成的棋盘中&#xff0c;恰有一个方格与其他方格不同&#xff0c;称该方格为一特殊方格。现在用4种不同形状的 L型&#xff08;占3小格&#xff09;骨牌覆…...

基于OMAPL138+FPGA核心板多核软件开发组件MCSDK开发入门(下)

本文测试板卡为创龙科技 SOM-TL138F 是一款基于 TI OMAP-L138(定点/浮点 DSP C674x + ARM9)+ 紫光同创 Logos/Xilinx Spartan-6 低功耗 FPGA 处理器设计的工业级核心板。核心板内部OMAP-L138 与 Logos/Spartan-6 通过 uPP、EMIFA、I2C 通信总线连接,并通过工业级 B2B连接器引…...

熵,线性规划,半监督自监督聚类打标签

1.熵 信息熵是消除不确定性所需信息量的度量。 信息熵就是信息的不确定程度&#xff0c;信息熵越小&#xff0c;信息越确定。 对象的信息熵是正比于它的概率的负对数的&#xff0c;也就是 I©−log(pc) 其中n为事件的所有可能性。 为什么使用交叉熵&#xff1f;在机器学习…...

求极限方法总结

1.利用四则运算法则求极限 2.利用两个重要极限求极限 //0除以0型 //1的无穷次方型 3.利用等价无穷小替换替换求极限 //在等价替换时注意和差项 4.利用洛必达法则求极限 5.利用夹逼准则求极限 6.利用单调有界数列极限准则求极限 7.利用无穷小的性质求极限 8.利用函数的连续性…...

Flutter Scrollable 中ViewPort滚动原理

关于Flutter Sliver组件内容可以参考下面这位博主博客&#xff0c;写的已经非常好了&#xff0c;这里就不再赘述。 38、Flutter之 可滚动组件简介_flutter 可滑动_风雨「83」的博客-CSDN博客 通过阅读上面的博客&#xff0c;我们已经知道了Scrollable和Viewport基础概念&#…...

多目标粒子群结合极限学习机ELM求解帕累托前沿,MOPSO-ELM

目录 背影 parte前沿的定义 注意事项 基于多目标粒子群结合极限学习机的帕累托前沿求解帕累托前沿 主要参数 MATLAB代码 效果图 结果分析 展望 背影 在目标优化过程种,很多时候都两个或者多个目标,并且目标函数不能同时达到最优,鱼与熊掌不可兼得,这个时候可以通过求解帕…...

(二十)操作系统-信号量机制

文章目录一、知识预览二、前篇文章知识点回顾三、信号量机制四、信号量机制—整形信号量五、信号量机制—记录型信号量六、总结一、知识预览 二、前篇文章知识点回顾 进程互斥的四种软件实现方式&#xff1a;单标志法、双标志先检查、双标志后检查、Peterson算法。&#xff08;…...

ceph osd slow ops 检测

目的 常用的方法检测 ceph slow 问题 参考 yceph -scluster:id: 22908555-e596-4c2d-a1f6-34fcf4d3e935health: HEALTH_WARNDegraded data redundancy: 46384/12805029 objects degraded (0.362%), 145 pgs degraded, 122 pgs undersized309 slow ops, oldest one blocked…...

百度CTO王海峰:深度学习平台+大模型,夯实产业智能化基座

2月27日&#xff0c;中国人工智能学会首届智能融合产业论坛在成都顺利举办。本届论坛由中国人工智能学会&#xff08;CAAI&#xff09;主办&#xff0c;中国人工智能学会智能融合专委会、百度公司、深度学习技术及应用国家工程研究中心和电子科技大学联合承办。中国工程院多名院…...

【C++】vector的基本使用

难道向上攀爬的那条路&#xff0c;不是比站在顶峰更让人热血沸腾吗&#xff1f; 文章目录一、vector和string的联系与不同二、vector的扩容操作1.resize() &#xff08;缺省值为匿名对象&#xff09;&& reserve()2.reserve在g和vs上的扩容机制3.reserve异地扩容和shri…...

社交媒体营销的5个好处

有些人认为&#xff0c;社交媒体营销不能直接与销售挂钩。这就是为什么在制定营销策略时&#xff0c;社交媒体营销会被部分人忽视的原因。然而&#xff0c;与其他广告渠道不同&#xff0c;社交媒体是双向渠道。忽视社交媒体营销将影响与客户的关系。最重要的是&#xff0c;它将…...

飞行机器人专栏(十)-- 异构多视角视觉系统

感知系统架构为满足天空端主控制器的诸如RGB-D图像处理等大容量数据吞吐、高速并行计算、实时运动控制以及通信和可视化任务的计算算力需求&#xff0c;同时优化功耗表现&#xff0c;采用了结构紧凑、功耗表现优异的边缘计算硬件NVIDA IJetson AGXOrin 。该开发者套件包含高性能…...

2023年湖北住建厅八大员各岗位题库精准小题库-启程别

2023年湖北住建厅八大员各岗位题库精准小题库-启程别 住建厅八大员&#xff08;施工员、质量员、资料员、材料员、机械员、标准员、劳务员&#xff09; 各岗位题库分2种&#xff1a; 1.住建厅八大员报名之后会有培训任务&#xff0c;完成培训任务学习才能安排考试&#xff0c;…...

志愿者招募令|来!一起Build OceanBase第一次开发者大会

2023 年 3 月 25 日&#xff0c;我们将开启第一次 OceanBase 开发者大会&#xff0c;走近开发者&#xff0c;共同探讨单机分布式、云原生、HTAP 等数据库前沿趋势&#xff0c;分享全新的产品 Roadmap&#xff0c;交流场景探索和最佳实践。 为了让活动现场更有活力&#xff0c;…...

java 元数据 和 元注解

基本介绍三种基本注解OverrideDeprecatedSuppressWarnings四种元注解RetentionTargetDocumentedInherited一、基本介绍1.概述java注解&#xff08;Annotation&#xff09;[ˌ nəˈ teɪʃn]&#xff0c;又称java标注&#xff0c;也被称为元数据&#xff08;关于数据的数据&…...

RFID射频卡写入手机NFC心路小记

声明&#xff1a; 本文仅是作者学习探索的心里路程日记&#xff0c;如果您看完以后&#xff0c;从中获得了一些知识&#xff0c;作者不胜荣幸。科技是一把双刃剑&#xff0c;利用好了&#xff0c;可以方便生活&#xff0c;利用不当也肯能扰乱公共管理秩序&#xff0c;造成不必要…...

【C++】STL 模拟实现之 list

文章目录一、list 的常用接口及其使用1、list 一般接口2、list 特殊接口3、list 排序的性能分析二、list 迭代器的实现1、迭代器的分类2、list 迭代器失效问题3、list 迭代器源码分析4、list 迭代器模拟实现4.1 普通迭代器4.2 const 迭代器4.3 完整版迭代器三、list 的模拟实现…...

20230228----重返学习-数组-引用数据类型的转换-基础调试用方法-对象检测-各数据转布尔值及相等运算符-条件语句-循环语句

day-017-seventeen-20230228-数组-引用数据类型的转换-基础调试用方法-对象检测-各数据转布尔值及相等运算符-条件语句-循环语句 数组 字面量表示法 [数组成员0,数组成员1,数组成员2]用中括号语法来取值 var ary [5,6,7] console.log("ary[0]--->", ary[0])数组…...

apscheduler 定时任务框架

Apscheduler 介绍 四大组件 triggers&#xff1a;触发器&#xff0c;用于设定触发任务的条件job stores&#xff1a;作业存储器&#xff0c;用于存放任务&#xff0c;可以存放在数据库或内存&#xff0c;默认内存executors&#xff1a;执行器&#xff0c;用于执行任务&#x…...

Softing OPC Tunnel——绕过DCOM配置实现OPC Classic广域网通信

一 摘要 Softing OPC Tunnel是dataFEED OPC Suite的一个组件&#xff0c;可避免跨设备OPC Classic通信中出现的DCOM配置问题&#xff0c;同时可保证跨网络数据交换的高性能和可靠性。OPC Tunnel内部集成的存储转发功能&#xff0c;可在连接中断时缓存数据&#xff0c;并在重新…...

Java的运算操作

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录算术运算符增量运算符注意自增自减运算符关系运算符逻辑运算符逻辑与&&逻辑或||逻辑非&#xff01;…...

基于OBD系统的量产车评估测试(PVE)

在轻型汽车污染物排放限值及测量方法&#xff08;中国第六阶段&#xff09;中&#xff0c;除了对汽车尾气排放等制定了更为严格的限制之外&#xff0c;也在OBD系统认证项目中增加了新的要求——量产车评估&#xff08;Production Vehicle Evaluation&#xff09;测试。该测试由…...

【蓝桥杯集训10】Tire树 字典树 最大异或对专题(3 / 3)

目录 字典树模板 1、插入操作 2、查询操作 143. 最大异或对 - trie 二进制 3485. 最大异或和 - 前缀和Trie滑动窗口 字典树模板 活动 - AcWing 字典树&#xff1a;高效存储和查找字符串集合的数据结构 son[节点1地址][值]节点2地址 —— 节点1的子节点为节点2cnt[节点地…...

docker部署zabbix6.2.7+grafana

目录 1、下载docker 2、下载相关镜像文件 3、创建一个供zabbix系统使用的网络环境 4、创建一个供mysql数据库存放文件的目录 5、启动mysql容器 6、为zabbix-server创建一个持久卷 7、启动zabbix-server容器 8、创建语言存放目录 9、启动zabbix-web容器 10、启动zabbix…...

【Java开发】JUC基础 04:Synchronized、死锁、Lock锁

1 概念介绍并发&#xff1a;同一个对象被多个线程同时操作&#x1f4cc; 线程同步现实生活中&#xff0c;我们会遇到“同一个资源&#xff0c;多个人都想使用”的问题&#xff0c;比如&#xff0c;食堂排队打饭,每个人都想吃饭&#xff0c;最天然的解决办法就是&#xff0c;排队…...

离散数学---期末复习知识点

一、 数理逻辑 [复习知识点] 1、命题与联结词&#xff08;否定&#xffe2;、析取∨、合取∧、蕴涵→、等价↔&#xff09;&#xff0c;命题(非真既假的陈述句),复合命题(由简单命题通过联结词联结而成的命题) 2、命题公式与赋值&#xff08;成真、成假&#xff09;&#x…...

在线安装ESP32和ESP8266 Arduino开发环境

esp32和esp8266都是乐鑫科技开发的单片机产品&#xff0c;esp8266价格便宜开发板只需要十多块钱就可以买到&#xff0c;而esp32是esp8266的升级版本&#xff0c;比esp8266的功能和性能更强大&#xff0c;开发板价格大约二十多元就可以买到。 使用Arduino开发esp32和esp8266需要…...

【Python实战】激情澎湃,2023极品劲爆舞曲震撼全场,爬虫一键采集DJ大串烧,一曲醉人女声DJ舞曲,人人都听醉~(排行榜采集,妙啊~)

导语 哈喽&#xff01;大家好。我是木木子吖~今天给大家带来爬虫的内容哈。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 今天教大家Python爬虫实战一键采集大家喜欢的DJ舞曲哦&#xff01; …...

[SSD综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?

版权声明&#xff1a;付费作品&#xff0c;未经许可&#xff0c;不可转载前言SSD &#xff08;Solid State Drive&#xff09;&#xff0c;即固态硬盘&#xff0c;通常是一种以半导体闪存&#xff08;NAND Flash&#xff09;作为介质的存储设备。SSD 以半导体作为介质存储数据&…...

SAP Insurance Analyzer

SAP Insurance Analyzer 是一款用于保险公司财务和风险管理的软件。SAP Insurance analyzer 支持基于 IFRS 17 或 Solvency II 的保险合同估值和计算要求。SAP Insurance Analyzer 于 2013 年 5 月推出&#xff0c;为源数据和结果数据集成了一个预配置的保险数据模型。 源数据…...

专业网站建设开发/百度网页链接

文章目录 在(0,1]上的瑕积分在$[1,+\infty)$上的无穷限反常积分结论提问?p分数的积分: ∫ 1 x p d x \int\frac1{x^p}dx...

对电子商务网站建设的认识/国际时事新闻最新消息

8.1异常 异常是异常控制流的一种形式&#xff0c;它一部分是由硬件实现的&#xff0c;一部分是由操作系统实现的。有一部分是由硬件实现的&#xff0c;所以具体细节将随系统的不同而有所不同。异常的剖析&#xff1a;当异常处理程序完成处理后&#xff0c;根据引起异常的事件的…...

班级网站模板下载/成都百度推广

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; …...

网站永久镜像怎么做/廊坊seo培训

最近DNN很受欢迎,博克圆有不少bloger对这个很有研究,并翻译了不少资料,ME也想看 看究竟,不过在看DNN之前,我决定先看看ASP.NET STARTER KIT的Portal Starter Kit,建立个简单的概念也许会对学习DNN有帮助了 我个人觉得Portal Starter Kit没有细看的必要,大概了解下面四点就可以…...

做百度联盟用什么做网站/最吸引人的引流话术

HTML代码的优化  与Google和MSN相比&#xff0c;Yahoo!对HTML代码的关注程度更高。很多测试表明&#xff0c;HTML文件中的错误&#xff0c;可能在Google或MSN中影响很小甚至几乎没有&#xff0c;不妨碍该页面出现在SERP的前端;但在Yahoo!中获得成功的几率要小得多。同样的&am…...

做网站需要美工吗/注册公司网站

申明&#xff1a;博文有一部分内容是转载的。 理解协议栈中&#xff0c;Profiles, Services&#xff0c;Characteristics&#xff0c;UUID等值的概念。 在这之前我们得先了解一下一些专业词汇&#xff1a; 1、profile profile可以理解为一种规范&#xff0c;一个标准的通信协…...