洛谷 P1228 【地毯填补问题】
事实上感觉四个的形状分别是这样:

spj报错:
1:c 越界
2:x,y 越界
3:mp[x][y] 已被占用
4:mp[x][y] 从未被使用
题解:
初看这个问题,似乎无从下手,于是我们可以先考虑最简单的情况,既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<cstdio>
typedef long long ll;
ll x,y,len; int k;
ll fun(int k)
{
ll sum=1;
for(int i=1;i<=k;++i) sum*=2;
return sum;
}
void solve(ll x,ll y,ll a,ll b,ll l)
{
if(l==1) return;
if(x-a<=l/2-1 && y-b<=l/2-1)
{
printf("%lld %lld 1\n",a+l/2,b+l/2);
solve(x,y,a,b,l/2);
solve(a+l/2-1,b+l/2,a,b+l/2,l/2);
solve(a+l/2,b+l/2-1,a+l/2,b,l/2);
solve(a+l/2,b+l/2,a+l/2,b+l/2,l/2);
}
else if(x-a<=l/2-1 && y-b>l/2-1)
{
printf("%lld %lld 2\n",a+l/2,b+l/2-1);
solve(a+l/2-1,b+l/2-1,a,b,l/2);
solve(x,y,a,b+l/2,l/2);
solve(a+l/2,b+l/2-1,a+l/2,b,l/2);
solve(a+l/2,b+l/2,a+l/2,b+l/2,l/2);
}
else if(x-a>l/2-1 && y-b<=l/2-1)
{
printf("%lld %lld 3\n",a+l/2-1,b+l/2);
solve(a+l/2-1,b+l/2-1,a,b,l/2);
solve(a+l/2-1,b+l/2,a,b+l/2,l/2);
solve(x,y,a+l/2,b,l/2);
solve(a+l/2,b+l/2,a+l/2,b+l/2,l/2);
}
else
{
printf("%lld %lld 4\n",a+l/2-1,b+l/2-1);
solve(a+l/2-1,b+l/2-1,a,b,l/2);
solve(a+l/2-1,b+l/2,a,b+l/2,l/2);
solve(a+l/2,b+l/2-1,a+l/2,b,l/2);
solve(x,y,a+l/2,b+l/2,l/2);
}
}
int main()
{
scanf("%d %lld %lld",&k,&x,&y);
len=fun(k);
solve(x,y,1,1,len);
return 0;
}
洛谷 P1228 【地毯填补问题】的更多相关文章
- 洛谷P1228 地毯填补问题
P1228 地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站 ...
- 浅谈分治 —— 洛谷P1228 地毯填补问题 题解
如果想看原题网址的话请点击这里:地毯填补问题 原题: 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子 ...
- [洛谷P1228]地毯填补问题 题解(分治)
Description 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的 ...
- P1228 地毯填补问题(分治)
P1228 地毯填补问题(分治) 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将 ...
- 洛谷 P3397 地毯
P3397 地毯 题目背景 此题约为NOIP提高组Day2T1难度. 题目描述 在n*n的格子上有m个地毯. 给出这些地毯的信息,问每个点被多少个地毯覆盖. 输入输出格式 输入格式: 第一行,两个正整 ...
- 洛谷P1228 分治
https://www.luogu.org/problemnew/show/P1228 我真傻,真的,我单知道这种题目可以用dfs剪枝过,没有想到还能构造分治,当我敲了一发dfs上去的时候,只看到一个 ...
- 洛谷 P3397 地毯 【二维差分标记】
题目背景 此题约为NOIP提高组Day2T1难度. 题目描述 在n*n的格子上有m个地毯. 给出这些地毯的信息,问每个点被多少个地毯覆盖. 输入输出格式 输入格式: 第一行,两个正整数n.m.意义如题 ...
- 洛谷-铺地毯-NOIP2011提高组复赛
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- 洛谷P3397 地毯(差分)
二维平面上的差分,我们可以对每行处理. 比如我们要把(2,2)(5,5)之间的矩形加上1,可以这样处理. 0 0 0 0 0 0 0 +1 0 0 0 -1 0 +1 0 0 0 -1 0 +1 0 ...
随机推荐
- 链家H5项目总结
在此次项目中,使用的是高度百分比.对于适配这一块确实少了很多. 1.如果是用高度百分比的话.则img需要写成这样的样式. img{ width:auto; height:100%; display: ...
- css 文本溢出时显示省略号
.text-ellipsis { width:100px; height:60px; overflow: hidden;//隐藏滚动条 text-overflow:ellipsis; white-sp ...
- BZOJ 4668: 冷战 并查集&&暴力LCA(雾)
利用并查集按秩合并,保存每个点合并的时间: 求时间时,就一直跳u=fa[u],并记录路径上时间的最大值,代表最后一次合并的时间 #include<cstdio> #include<i ...
- Codeforces 1141F2(贪心、预处理)
要点 一开始dp然后码力太辣鸡并且算法带假于是调了很久一交还WA在28-- 吐槽完毕.后来想拿栈优化dp时发现其实完全不需要dp,贪心选取即可,当前的不兼容就干脆不要它了,结果不会变差.然后想要什么就 ...
- python 6 循环
循环 要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 6 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+10000,直接写表 ...
- python学习《一》
从词篇博客开始,记录python3.0学习笔记 python3里 字符串用双引号,或者单引号,包起来 3双引号和3单引号 代表换行
- 报错:Could not reserve enough space for object heap error
windows命令行运行某个命令时出现: 解决办法: 设置开始->控制面板->系统和安全->系统->高级系统设置->环境变量->系统变量->新建: 变量名: ...
- CF1142A The Beatles
思路: 令p表示步数,l表示步长.由于p是使(l * p) % (n * k) == 0的最小的p,所以p = (n * k) / gcd(n * k, l). 设l = k * x + r,则由题意 ...
- display:inline-block间隙产生的原因以及解决方案
display-inline-block是让元素在一行显示,但是这些元素在html里面是上下行排列的,所以中间有换行符,于是并排显示就有了换行符带来的空隙.那么如何解决呢? 方案一:将html标签要d ...
- css简单动画
这几天公司需要更新一个移动端web的页面,因为任务简单,就交给作为菜鸟新人的我来做.第一次接触css还是在14年刚上大一的时候跟着html一起学习的,之后就再也没有接触过.所以只好一边学习,一边完成任 ...