P1228 地毯填补问题(葬送的芙蓉王【bushi】)

地毯填补问题

题目描述

相传在一个古老的阿拉伯国家里,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,美丽漂亮聪慧的公主就是他的人了。公主这一个方格不能用地毯盖住,毯子的形状有所规定,只能有四种选择(如图):

并且每一方格只能用一层地毯,迷宫的大小为 2 k × 2 k 2^k\times 2^k 2k×2k 的方形。当然,也不能让公主无限制的在那儿等,对吧?由于你使用的是计算机,所以实现时间为 1 1 1 秒。

输入格式

输入文件共 2 2 2 行。

第一行一个整数 k k k,即给定被填补迷宫的大小为 2 k × 2 k 2^k\times 2^k 2k×2k 0 < k ≤ 10 0\lt k\leq 10 0<k10);
第二行两个整数 x , y x,y x,y,即给出公主所在方格的坐标( x x x 为行坐标, y y y 为列坐标), x x x y y y 之间有一个空格隔开。

输出格式

将迷宫填补完整的方案:每一补(行)为 x   y   c x\ y\ c x y c x , y x,y x,y 为毯子拐角的行坐标和列坐标, c c c 为使用毯子的形状,具体见上面的图 1 1 1,毯子形状分别用 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4 表示, x , y , c x,y,c x,y,c 之间用一个空格隔开)。

样例 #1

样例输入 #1

3                          
3 3

样例输出 #1

5 5 1
2 2 4
1 1 4
1 4 3
4 1 2
4 4 1
2 7 3
1 5 4
1 8 3
3 6 3
4 8 1
7 2 2
5 1 4
6 3 2
8 1 2
8 4 1
7 7 1
6 6 1
5 8 3
8 5 2
8 8 1

提示

spj 报错代码解释:

  1. c c c 越界;
  2. x , y x,y x,y 越界;
  3. ( x , y ) (x,y) (x,y) 位置已被覆盖;
  4. ( x , y ) (x,y) (x,y) 位置从未被覆盖。

upd 2023.8.19 \text{upd 2023.8.19} upd 2023.8.19:增加样例解释。

样例解释

大致思路

当k=1时,我们可以非常容易得到毯子填补的方案。当k=2甚至更大时,我们可以将其划分为四大块,但是公主位只有一个,而对于其他没有公主位的四方格,似乎和原问题形式不一样。但是我们可以对其加以处理,使其四个子问题都具有相同形式——即,我们可以手动为其他三个没有公主位的四方格增加新的“公主位”。例如,当公主位在左上角时,我们可以将剩余三个四方格的交界处用毯子1来补上,这样每个四方格都会被分配到一个公主位,称为特殊的方阵,问题便迎刃而解(如图所示)。因此我们就可以采用分治的方法去不断将正方形划分为4个子正方形,再分别填充,直到小正方形边长为1时,就是公主位了,不用做任何处理。

8x8的方格里,公主在右上角的格子里,然后在左上角的4x4方格中,选右下角,在左下角的方格中,选右上角,在右下角的方格中,选左上角,组成一个L,现在一个8x8的方格被分为四个4x4的方格,每个4x4的方格中,都有一块被挖掉的部分,左上角的4*4方格中被挖掉的部分是它右下角组成L的那一块,右上角的4x4方格中,挖去的是公主的位置,左下角和右下角的方格,挖去的都是L那部分

然后对每个4x4方格,重复以上操作,直到方格划分为2*2的,四个格子中有一个被挖去,另外三个自然组成一个L

AC CODE

#include<bits/stdc++.h>
using namespace std;
 
// 正方形左上角坐标xx和yy,公主坐标x和y,正方形边长k
void work(int xx,int yy,int x,int y,int k){
    if(k == 1)  return;
    k/=2;
    // 左上角
    if(x < xx+k && y < yy+k){
        printf("%d %d %d\n",xx+k,yy+k,1);
        // 递归覆盖左上角
        work(xx,yy,x,y,k);
        // 覆盖右下角
        work(xx+k,yy+k,xx+k,yy+k,k);
        // 覆盖左下角
        work(xx+k,yy,xx+k,yy+k-1,k);
        // 覆盖右上角
        work(xx,yy+k,xx+k-1,yy+k,k);
    }
    // 右上角
    else if(x < xx+k && y >= yy+k){
        printf("%d %d %d\n",xx+k,yy+k-1,2);
        // 递归覆盖左上角
        work(xx,yy,xx+k-1,yy+k-1,k);
        // 覆盖右下角
        work(xx+k,yy+k,xx+k,yy+k,k);
        // 覆盖左下角
        work(xx+k,yy,xx+k,yy+k-1,k);
        // 覆盖右上角
        work(xx,yy+k,x,y,k);
    }
    // 左下角
    else if(x >= xx+k && y < yy+k){
        printf("%d %d %d\n",xx+k-1,yy+k,3);
        // 递归覆盖左上角
        work(xx,yy,xx+k-1,yy+k-1,k);
        // 覆盖右下角
        work(xx+k,yy+k,xx+k,yy+k,k);
        // 覆盖左下角
        work(xx+k,yy,x,y,k);
        // 覆盖右上角
        work(xx,yy+k,xx+k-1,yy+k,k);
    }
    // 右下角
    else{
        printf("%d %d %d\n",xx+k-1,yy+k-1,4);
      	// 递归覆盖左上角
        work(xx,yy,xx+k-1,yy+k-1,k);
        // 覆盖右下角
        work(xx+k,yy+k,x,y,k);
        // 覆盖左下角
        work(xx+k,yy,xx+k,yy+k-1,k);
        // 覆盖右上角
        work(xx,yy+k,xx+k-1,yy+k,k);
    }
}
 
int main()
{
    int x,y,k;
    cin >> k >> x >> y;
    work(1,1,x,y,(1 << k));
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/361540.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue Router 动态路由

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 动态路由的使用2. 动态路由的原理解析路由匹配路由参数的传递组件渲染动态路由的变化 3. 更多动态路由的实例3.1. 动态路径匹配多层级3.2. 动态路径的正则匹配3.3. 编程式导航与动态路由 总结 ⭐ 写在最后 ⭐ 专栏简介 Vue学习之…

CSS 3D三角彩色锥形旋转动画效果

<template><view class="pyramid-loader"><view class="wrapper"><span class="side side1"></span> <!-- 金字塔的一个面 --><span class="side side2"></span> <!-- 金字塔的…

会计试算平衡

目录 一. 试算平衡的意义二. 试算平衡的原理和内容三. 试算平衡表 \quad 一. 试算平衡的意义 \quad ①验证错误 ②便于编制会计报表 试算表根据各分类账借贷余额汇总编制而成&#xff0c;依据试算表编制会计报表将比直接依据分类账来编制更为方便,拥有大量分类账的企业尤为便捷…

浙大发布Agent学习框架,13B 模型达到 ChatGPT 水平!

2023 年下半年&#xff0c;AI Agent 正式开启「大模型下半场」。 自“人工智能”这门学科创立之初&#xff0c;一种可以“观察世界”-“思考推理”-“做出行动”-“反思学习”的人造代理就是构建通用人工智能的终极目标之一。而基于大模型的 AI Agent 借助大模型强大的推理判断…

(天坑的87端口)nginx代理端口不生效,代理87端口遇到的问题及原因

目录 一. 问题产生 二.问题现象 三.问题排查 四.柳暗花明 五.解决方案 六.不安全的端口号 七.总结 一. 问题产生 因为之前的一个项目一直是用的86端口&#xff0c;这次要在一台新的服务器上重新部署两个项目&#xff0c;很自然而然的继续86端口&#xff0c;另一个也没想&…

【数据结构与算法】之哈希表系列-20240130

这里写目录标题 一、383. 赎金信二、387. 字符串中的第一个唯一字符三、389. 找不同四、409. 最长回文串五、448. 找到所有数组中消失的数字六、594. 最长和谐子序列 一、383. 赎金信 简单 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不…

C++/MFC:在窗体Form(Dialog)中多个编辑框时,在输入时将回车解释为TAB键,将输入焦点移到下一个编辑框的方法

很多时候&#xff0c;为了输入方便&#xff0c;常用的做法&#xff0c;就是将回车键解释为将输入焦点移动到下一个编辑框中。就像是我的VxTerm中的快速连接输入一样&#xff1a; VxTerm是一个国产化替代的SSH工具&#xff0c;可以从本站的资源中免费下载并且免费使用&#xff…

R高级绘图 | P1 | 带边缘分布散点图 | 代码注释 + 结果解读

新系列 —— R高级绘图&#xff0c;准备整理所有曾经绘制过的图图和未来需要的图图们的代码&#xff01;预计这个系列会囊括所有常见图形&#xff0c;只提供高级绘图代码&#xff0c;基础绘图主要在 R语言绘图 系列中进行介绍&#xff0c;这个系列咱们主打&#xff1a;需要XX图…

数学公式OCR识别php 对接mathpix api 使用公式编译器

数学公式OCR识别php 对接mathpix api 一、注册账号官网网址&#xff1a;https://mathpix.com 二、该产品支持多端使用注意说明&#xff08;每月10次&#xff09; 三、api 对接第一步创建create keyphp对接api这里先封装两个请求函数&#xff0c;get 和post &#xff0c;通过官方…

Kotlin快速入门系列11

Kotlin的集合 集合类 Java类库有一套相当完整的容器集合类用来持有对象。跟Java一样&#xff0c;集合类存放的都是对象的引用&#xff0c;而非对象本身(我们经常说的集合指的是集合中对象的引用)&#xff0c;Kotlin的集合类是在Java的集合类库基础上进行的优化&#xff0c;新引…

拥抱变局,坚韧向新|复旦大学-华盛顿大学EMBA项目C20毕业典礼

12月初&#xff0c;复旦大学-华盛顿大学EMBA项目20班的学员们前往美国&#xff0c;完成了项目最后一次移动课堂&#xff0c;并在奥林商学院举办了毕业典礼。      20班的学员们在项目20周年之际入学&#xff0c;也是疫情以来第一个正式恢复线下授课的班级。虽然经历了一些波…

《二叉树》——3(层序遍历)

目录 前言&#xff1a; 层序遍历: 解析&#xff1a; 前言&#xff1a; 本文主讲链式二叉树的层序遍历&#xff0c;在前面的张篇blog我们初步实现了链式二叉树递归部分的内容&#xff0c;对于递归算法的学习和思维方式我们仍然需要不断加强&#xff0c;所以将对链式二叉树进行…

Docker本地部署Firefox浏览器并结合内网穿透公网访问

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器&#xff0c;由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

Python pip 不是内部或外部命令...

文章目录 1 问题截图2 解决办法2.1 配置环境变量2.2 试试 pip3 3 扩展分析3.1 查询 Python 版本及位数3.2 查询 Python 安装路径3.3 查询当前 pip 的版本 1 问题截图 2 解决办法 2.1 配置环境变量 2.2 试试 pip3 根据安装的 Python 版本不同&#xff0c;使用的 pip 也会不同若…

ESP8266 AP配网

首先引入需要的库 #include <WiFiManager.h> // https://github.com/tzapu/WiFiManager 在setup() 方法中设置网络名称等待登录连接 void setup(){Serial.println("Wait for Smartconfig");WiFi.mode(WIFI_STA);WiFiManager wm;bool res;res wm.autoConnec…

基础小白快速入门python------Python程序设计结构,循环

循环在计算机中&#xff0c;是一个非常重要的概念&#xff0c;是某一块儿代码的不断重复运行&#xff0c;是一种逻辑思维 在编程中的体现&#xff0c;运用数学思维加代码结合加数据&#xff0c;就构成了一个循环。 在Python中&#xff0c;循环主要分为三大类 for循环 while循…

面试必考精华版Leetcode450. 删除二叉搜索树中的节点

题目&#xff1a; 代码&#xff08;首刷看解析&#xff09;&#xff1a; class Solution { public:TreeNode* deleteNode(TreeNode* root, int key) {if(rootnullptr){return nullptr;}if(root->val > key ){root->left deleteNode(root->left,key);return root;…

EXCEL VBA实现重复字段出现次数并列显示

EXCEL VBA实现重复字段出现次数并列显示 Sub dotest() Dim arr, dApplication.ScreenUpdating FalseSet d CreateObject("Scripting.Dictionary")With Sheets("Sheet2")r .Cells(.Rows.Count, "a").End(xlUp).Rowarr .[a1].Resize(r, 1)En…

幻兽帕鲁服务器多少钱?服务器租借价格一览表

2024年幻兽帕鲁服务器价格表更新&#xff0c;阿里云、腾讯云和华为云Palworld服务器报价大全&#xff0c;4核16G幻兽帕鲁专用服务器阿里云26元、腾讯云32元、华为云26元&#xff0c;阿腾云atengyun.com分享幻兽帕鲁服务器优惠价格表&#xff0c;多配置报价&#xff1a; 幻兽帕鲁…

福布斯财富增长榜前十富豪身价暴增3.5万亿!他们致富的秘诀究竟是?

按照《福布斯》最新的数据显示&#xff0c;今年全球前十位财富增长最多的富豪的身家总共增加了4900亿美元&#xff08;约3.5万人民币&#xff09;&#xff0c;大家可能对于3.5万亿没什么概念&#xff0c;但是换算一下&#xff0c;中国一共才14亿人&#xff0c;如果把这3.5万亿平…