题目传送门

题意:给出一个$N \times N \times N$的方块,你可以在每一个$1 \times 1 \times 1的方块上放上一个摄像头,摄像头的监视范围为6个方向的无限远距离。问最少需要多少摄像头,并给出具体方案。$N \leq 2000$


思维题

样例中的放置方法对我们是很有启发的

样例中是这样的一个$2 \times 2 \times 2$的正方体(图不好看qwq)

对于选择的$(1,1,1)$点,它的控制范围是

图真的只能凑合看qwq

我们可以考虑将$N \times N \times N$的方块分为这样的八个部分,其中左上角的正方形代替$2 \times 2 \times 2$的立方体中$(1,1,1)$的作用,右下角的正方形代替$2 \times 2 \times 2$的立方体中$(2,2,2)$的作用

接下来我们就要考虑如何做到让一个正方形能够像$(1,1,1)$一样影响到左边、后面、下面的所有正方形

我们先单独考虑影响后面,因为这样子好讲

考虑如果我们只有一个面(也就是在二维空间上)要怎么放才会最好
肯定是下面这样

可是如果我们每一层都这么放肯定是无法满足条件的

所以我们考虑在接下来每一层在上一层的基础上每个往下移一格

也就是说第二层与第三层像下面的左图和右图一样放置

就可以满足要求了

利用一些空间想象能力可以想到:对于右边和下面来说都是满足条件的,所以我们只需要$O(\text{边长}^2)$就可以构造一个满足条件的正方体了。

设某一个正方形边长为$x$,那么我们总共需要的摄像头就是$x^2+(N-x)^2$,可以知道$x=\frac{N}{2}$时使用的摄像头最少,为$(\frac{N}{2})^2+(\frac{N + 1}{2})^2$

方案就像上面一样输出就行了,注意输出优化

 #include<bits/stdc++.h>
 using namespace std;

 ];
 inline void print(int x , char c = '\n'){
     ;
     while(x){
         output[dirN++] = x % ;
         x /= ;
     }
     while(dirN)
         putchar(output[--dirN] + );
     putchar(c);
 }

 int main()
 {
     int N;
     cin >> N;
     print((N / ) * (N / ) + ((N + ) / ) * ((N + ) / ));
      ; i <= N /  ; i++)
          ; j <= N /  ; j++){
             print(i , ' ');
             print(j , ' ');
             print((i + j - ) % (N / ) + );
         }
      ; i <= (N + ) /  ; i++)
          ; j <= (N + ) /  ; j++){
             print(N - i +  , ' ');
             print(N - j +  , ' ');
             print(N - (i + j - ) % ((N + ) / ));
         }
      ;
 }

最新文章

  1. JavaScript 闭包深入浅出
  2. PHP新手常见的一些不好习惯(抄的 有待理解)
  3. 一鼓作气 博客--第二篇 note2
  4. Android studio打开项目时出现 gradle download 无反应
  5. Hadoop学习14--Hadoop之一点点理解yarn
  6. python 之验证码
  7. LIS 最长递增子序列
  8. C++中的set和java的hashset有何区别?
  9. iOS获取文件和文件夹大小
  10. Linux下如何用vi编辑和保存文件
  11. springMVC之事务配置(问题来源:为什么数据保存不了)
  12. 在Web API中使用Swagger-UI开源组件(一个深坑的解决)
  13. [二]poi实践一
  14. 用python+selenium获取XX省交通违章数据
  15. 关于我们-成功人士西装定制服务第一品牌派斯特PAISTETAILOR绅士礼服
  16. 一致性算法--Paxos
  17. haskell,lisp,erlang你们更喜欢哪个?
  18. HTML5微数据
  19. Spring框架学习笔记(1)——HelloWorld
  20. mysql查看和修改密码策略

热门文章

  1. ionic3打包不能prod的问题
  2. Angular基础(六) DI
  3. 《Inside C#》笔记(完) 程序集
  4. Flutter 相机定制
  5. Flume组件汇总2
  6. 结对项目-四则运算&quot;软件&quot;之升级版
  7. 手把手教你搭建WEB服务器和FTP服务器
  8. Windows 10 执行pip list报错 UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode
  9. Flask入门和快速上手
  10. IO流_SequenceInputStream(序列流)