P5461 赦免战俘

题目背景

借助反作弊系统,一些在月赛有抄袭作弊行为的选手被抓出来了!

题目描述

现有 \(2^n\times 2^n (n\le10)\) 名作弊者站成一个正方形方阵等候 kkksc03 的发落。kkksc03 决定赦免一些作弊者。他将正方形矩阵均分为 4 个更小的正方形矩阵,每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免,剩下 3 个小矩阵中,每一个矩阵继续分为 4 个更小的矩阵,然后通过同样的方式赦免作弊者……直到矩阵无法再分下去为止。所有没有被赦免的作弊者都将被处以棕名处罚。

给出 nn,请输出每名作弊者的命运,其中 0 代表被赦免,1 代表不被赦免。

输入格式

一个整数 \(n\)。

输出格式

\(2^n \times 2^n\) 的 01 矩阵,代表每个人是否被赦免。数字之间有一个空格。

输入输出样例

输入 #1

3

输出 #1

0 0 0 0 0 0 0 1

0 0 0 0 0 0 1 1

0 0 0 0 0 1 0 1

0 0 0 0 1 1 1 1

0 0 0 1 0 0 0 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

1 1 1 1 1 1 1 1

【思路】

递归 + 分治

这是一道很有意思的题目

很考虑个人的建模能力或者认识自己的能力

建模能力很显然就是在脑海中建立模型的能力

根据题目想象出,也就是在脑海中模拟递归的过程

然后得出递归的式子

那么认自己的能力是什么呢?

就是别自己以为自己有建模能力

然后想当然的,就是看着思考

最后想上半天还没有结果

所以这个时候就必须要动一动笔和纸了

画一画思路更清晰

这就是认识自己的能力!!!!

我就没有建模的能力也没有认识自己的能力所以导致这道题目花了我好久的时间

这是一个 \(2 ^ n\) 的正方形,所以每一次分成四个全等的正方形的时候

边长都是刚好可以满足是2的倍数且可以组成正方形的

因为你 \(2 ^ n\) 每一次除以2分开之后,

就变成了 \(2 ^ {n - 1}\),还是2的倍数

所以可以继续分知道变为1

这就是在写代码之前需要搞明白的

然后,因为是左上角的那个正方形可以被赦免

也就是0。

所以只需要递归另外三个正方形就可以了

我想的递归是每次递归他们的两个对角上的顶点

然后通过他们顶点位置的变化来判断正方形的变化

从而达到递归的效果

先来考虑右上角这个小正方形



左上角的顶点位置在(1,5)上面,x1没有变

所以可以得 x1 = x1;

但是y1确改变了

成为了5,位置刚好是原来y2也就是大正方形的一半长度 + 1

所以可以得y1 = y1 + (y2 - y1 + 1) / 2或者y1 = y1 + (y2 - y1) / 2 + 1

两者是一个道理的

而右下角的顶点在(4,8)上面

x2是原来的一半可得

x2 = (x2 - x1 + 1) / 2;

为什么是这样呢?而不是x2 = x2 / 2呢

因为例子里面x1是等于1的,

但是x1不会永远等于1,

如果x1等于个别的你带入x2 = x2 / 2之后就会发现有很大的问题

所以就考虑我说的那个正确的!

y2是没有变的所以可得

y2 = y2

这样就很容易的推出了

(x1,y1 + (y2 - y1 + 1) / 2,x2 / 2,y2)

来了

这样就可以处理右上角的那个正方形了

知道了这些另外的两个正方形就很好可以推出来了

这里我就不多说了

因为过程和上面是一模一样的

分别考虑每个坐标的变化就好了

直接给出:

左下角的正方形:(x1 + (x2 - x1 + 1) / 2,y1,x2,y1 + (y2 - y1) / 2);

右下角的正方形:(x1 + (x2 - x1 + 1) / 2,y1 + (y2 - y1 + 1) / 2,x2,y2);

【完整代码】

#include<iostream>
#include<cstdio> using namespace std;
const int Max = 1030;
int a[11] = {1,2,4,8,16,32,64,128,256,512,1024};
int f[Max][Max]; void acioi(int x1,int y1,int x2,int y2)
{
if(x1 == x2 && y1 == y2)
{
f[x1][y1] = 1;
return;
}
acioi(x1 + (x2 - x1 + 1) / 2,y1 + (y2 - y1 + 1) / 2,x2,y2);
acioi(x1,y1 + (y2 - y1 + 1) / 2,x1 + (x2 - x1) / 2,y2);
acioi(x1 + (x2 - x1 + 1) / 2,y1,x2,y1 + (y2 - y1) / 2);
} int main()
{
int n;
cin >> n;
acioi(1,1,a[n],a[n]);
for(int i = 1;i <= a[n];++ i)
{
for(int j = 1;j <= a[n];++ j)
cout << f[i][j] << " ";
cout << endl;
}
return 0;
}

洛谷 P5461 赦免战俘 题解的更多相关文章

  1. 洛谷 P5461 赦免战俘

    洛谷 P5461 赦免战俘 传送门 思路 洛谷7月月赛第一题 着实是一道大水题,然后我月赛的时候没做出来...... 就是一道大模拟题呀,直接dfs就好了,我是反着处理的,所以最后要输出\(1-a[i ...

  2. 【递归】P5461赦免战俘

    题目相关 原题链接:P5461 赦免战俘 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 借助反作弊系统,一些在月赛有抄袭作弊行为的选手被抓出来了! 题目描述 现有 \(2 ...

  3. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  4. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  5. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  6. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  7. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  8. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  9. 【洛谷P3410】拍照题解(最大权闭合子图总结)

    题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...

随机推荐

  1. python爬虫-《笔趣看》网小说《悟空看私聊》

    小编是个爱看小说的人,哈哈 # -*- coding:UTF-8 -*- ''' 类说明:下载<笔趣看>网小说<悟空看私聊> ''' from bs4 import Beaut ...

  2. 为什么重写equals一定要重写hashCode方法?

    大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 下面我们看下Objec ...

  3. Spring AOP创建AroundAdvice实例

    AroundAdvice 1.在方法之前和之后来执行相应的操作 2.实现MethodInterceptor接口 接口文件: public interface IHello { public void ...

  4. NEST analyze与mapping

    /// <summary> /// POST /_analyze?pretty=true /// POST /employee/_analyze /// </summary> ...

  5. UnicodeDecodeError: 'utf-8' codec can't decode byte..问题

    解决UnicodeDecodeError: 'utf-8' codec can't decode byte..问题 问题描述: 问题分析: 该情况是由于出现了无法进行转换的 二进制数据 造成的,可以写 ...

  6. 页面 ajax

    function ajax({ url, success, data = { }, type= "GET", async = true}){ let xhr; if(XMLHttp ...

  7. 【一起学源码-微服务】Netflix Eureka 源码一:Netflix Eureka 源码初探,我们为什么要读源码?

    前言 最近发现 网上好多自己的博客,很多朋友转载了文章却不加下 原载地址,本文欢迎转载一起学习,请在目录出加上原出处,感谢.转载来自:博客(一枝花算不算浪漫) 看了前面几篇文章的小伙伴知道,前几天在学 ...

  8. SAP云平台CloudFoundry环境里route 超过quota的错误处理

    试图往SAP Cloud Platform CloudFoundry用命令行CLI部署应用时,遇到如下错误: 原因是因为这个新建的名为Haytham的subaccount没有分配application ...

  9. ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了

    之前Jerry已经写了一系列SAP Cloud Platform ABAP编程环境的文章,当时使用的环境,是SAP专门为SAP社区导师们创建的. 当时也有朋友留言,询问大家何时才能使用到免费的SAP云 ...

  10. robot framework笔记(三):扩展SeleniumLibrary库 (自定义关键字)

    (一)自定义和浏览器相关的关键字 以下代码GitHub 版本库地址: https://github.com/blairwind/blog_rf SeleniumLibrary的扩展文档中提供了3种增加 ...