P1228 地毯填补问题

离散上讲了这个问题,如下图

初看这个问题,似乎无从下手,于是我们可以先考虑最简单的情况,既n = 2时
0 0 0 1 这时,无论公主在哪个格子,我们都可以用一块毯子填满
继续考虑n = 4的情况
我们已经知道了解决2 * 2的格子中有一个障碍的情况如何解决,因此我们可以尝试构造这种情况
首先,显然可以将4 * 4的盘面划分成4个2 * 2的小盘面,其中一块已经存在一个障碍了
而我们只需在正中间的2 * 2方格中放入一块地毯,就可以使所有小盘面都有一个障碍
于是,n = 4的情况就解决了
我们可以将n = 4时的解法可以推广到一般情况,既当n = 2 k时,我们均可以将问题划分为4个n = 2 k – 1的子问题,然后分治解决即可。
来源

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r)/2
#define over(i,s,t) for(register int i=s;i<=t;++i)
#define lver(i,t,s) for(register int i=t;i>=s;--i)#define ul solve(a+l-1,b+l-1,a,b,l)//左上角
#define ur solve(a+l-1,b+l,a,b+l,l)//右上角
#define dl solve(a+l,b+l-1,a+l,b,l)//左下角
#define dr solve(a+l,b+l,a+l,b+l,l)//右下角using namespace std;
typedef long long ll;//全用ll可能会MLE,ll比int占的内存大const ll N=1002;
const ll INF=1e9+9;
const ll mod=9999991;
const double EPS=1e-6;inline void solve(ll x,ll y,ll a,ll b,ll l)//x,y是已覆盖点,a,b是除覆盖点剩下的图形的弯折角的点
{if(l==1)return;l>>=1;if(x<a+l&&y<b+l)//左上角{printf("%lld %lld 1\n",a+l,b+l);solve(x,y,a,b,l);//继续把有人的区块填满(现在只是填了1/4,左上角的整块的右下角填上了)ur;dl;dr;}if(x<a+l&&y>=b+l)//右上角{printf("%lld %lld 2\n",a+l,b+l-1);solve(x,y,a,b+l,l);//a不用动ul;dl;dr;}if(x>=a+l&&y<b+l)//左下角{printf("%lld %lld 3\n",a+l-1,b+l);solve(x,y,a+l,b,l);//b不用动ul;ur;dr;}if(x>=a+l&&y>=b+l)//右下角{printf("%lld %lld 4\n",a+l-1,b+l-1);solve(x,y,a+l,b+l,l);ul;ur;dl;}
}ll x,y,k,n;int main()
{scanf("%lld",&k);scanf("%lld%lld",&x,&y);solve(x,y,1,1,1<<k);return 0;
}

有任何疑问欢迎评论哦虽然我真的很菜
点个关注再走吧

【分治】P1228 地毯填补问题(多联骨牌覆盖棋盘问题)(递归,分治)难度⭐⭐⭐相关推荐

  1. P1228 地毯填补问题(Java语言实现)

    输入输出样例见原题链接:地毯填补问题 - 洛谷 这道题属于分治算法经典问题棋盘覆盖问题的衍生题.为了更好的讲解解题思路,在这里我将举一个例子,通过例子来说明,如下图,黑色方块为公主位置,其他颜色则为毛 ...

  2. 分治算法:地毯填补问题

    题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上, ...

  3. 从左上角到右下角 棋盘问题_分治算法之棋盘问题

    今天小编没怎么学习,就当放松了吧,明天一定要抓紧时间补回来~ 但是不会少了小伙伴们的算法的. 海风的幻想纯音乐 声明:因为两天同时写同一个算法会显示跟我这两天写的文章重复会不通过, 还要申请.审核好麻 ...

  4. 棋盘覆盖问题 java_Java基于分治算法实现的棋盘覆盖问题示例

    本文实例讲述了Java基于分治算法实现的棋盘覆盖问题.分享给大家供大家参考,具体如下: 在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其 ...

  5. 编程之美 --1 : 骨牌覆盖问题·一

    题目1 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形棋盘,然后 ...

  6. [剑指offer][JAVA]面试题第[33]题[二叉搜索树的后序遍历][单调栈][递归分治]

    [问题描述][中等] 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同.参考以下这颗二叉搜索树:5/ ...

  7. hihoCoder #1143 : 骨牌覆盖问题·一

    #1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形棋盘, ...

  8. 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3

    先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...

  9. 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151

    本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下.  骨牌覆盖问题 ...

最新文章

  1. 逸仙电商企业网络推广如何打造出百亿完美日记后又收购高端护肤品牌
  2. 解决OpenCV问题:OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale,
  3. 为什么一个程序申请的内存有限制_为什么要做自己的小程序商城,做一个要多久?...
  4. libpcap讲解与API接口函数讲解
  5. C++(STL):26 ---关联式容器set用法
  6. 「BZOJ1095」[ZJOI2007] Hide 捉迷藏
  7. Palindrome Degree(hash的思想题)
  8. 限定某个目录禁止解析php 限制user_agent php相关配置
  9. 【NLP】用腻了 CRF,试试 LAN 吧?
  10. 【BZOJ3942】Censoring [KMP]
  11. 采用nettcp绑定的wcf宿主到iis7
  12. 在JavaScript中仿真Java的enum
  13. ubuntu 18.04 更新显卡驱动
  14. 怎样杀计算机病毒,如何彻底查杀计算机病毒
  15. 图像相似度对比分析软件,图像相似度对比分析法
  16. 计算机上怎么在表格输入分秒,“excel表格怎么输入角度“excel 表格中怎么输入分秒的符号...
  17. Java基础---整理1:JRE+进制+注释+关键字+标识符+变量
  18. 201812CCF-CCSP竞赛:第1题-小明上学
  19. luogu P1600 天天爱跑步
  20. 全球10大黑客组织排行榜

热门文章

  1. 用于语义分割的特征共享协作网络
  2. hadoop思维导图
  3. Java8 对Map进行排序
  4. iOS 生成二维码/条形码
  5. Python Tesseract 图片识别-小操练
  6. Uber将整体式API拆分为微服务
  7. 【JAVA笔记——道】对象生命周期详解
  8. cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环amp;主角加入动作
  9. SqlServer按照指定顺序对字段进行排序
  10. Linux_Makefile模板