题目传送门

题意:给出一个$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 + ) / ));
         }
      ;
 }

LOJ564 613的天网 构造的更多相关文章

  1. 实验吧_密码忘记了(vim编辑器+代码审计)&天网管理系统(php弱比较+反序列化)

    密码忘记了 一开始尝试了各种注入发现都无效,在网页源码中找到了admin 的地址,输入地址栏发现并没有什么有用的信息,随便输个邮箱,网页返回了一个地址 ./step2.php?email=youmai ...

  2. 实验吧CTF天网管理系统

    天网你敢来挑战嘛 格式:ctf{ } 解题链接: http://ctf5.shiyanbar.com/10/web1/ 打开链接后,嗯,光明正大的放出账号密码,肯定是登不进的,查看源代码 看来是和md ...

  3. Codeforces Round #339 (Div. 1) C. Necklace 构造题

    C. Necklace 题目连接: http://www.codeforces.com/contest/613/problem/C Description Ivan wants to make a n ...

  4. 【实验吧】因缺思汀的绕过&&拐弯抹角&&Forms&&天网管理系统

    <?php error_reporting(); if (!isset($_POST['uname']) || !isset($_POST['pwd'])) { echo '<form a ...

  5. 实验吧之【Forms、天网管理系统】

    Forms 原题链接 http://ctf5.shiyanbar.com/10/main.php Form 其实是个提示,代表html表单 F12 查看源码,发现 <input name=&qu ...

  6. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题

    需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...

  7. 一步步构造自己的vue2.0+webpack环境

    前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...

  8. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  9. Eos开发——构造查询条件

    1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...

随机推荐

  1. Oracle 11g数据库的创建

    由于是自己自学Oracle,如果有问题,请大家指出,谢谢! Oracle提供了DBCA来创建数据库,对于初学者来说使用DBCA创建数据库简化了很多工作和设置,直接在交互界面即可实现所有的功能. 然而对 ...

  2. Linux 学习笔记之超详细基础linux命令 Part 5

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 4----------------- ...

  3. Retrofit2 动态(静态)添加请求头Header

    Retrofit提供了两个两种定义HTTP请求头字段的方法即静态和动态.静态头不能改变为不同的请求,头的键和值是固定的且不可改变的,随着程序的打开便已固定. 动态添加 @GET("/&quo ...

  4. (其他)最常用的15大Eclipse开发快捷键技巧

    转自CSDNJava我人生(陈磊兴)   原文出处 引言 做java开发的,经常会用Eclipse或者MyEclise集成开发环境,一些实用的Eclipse快捷键和使用技巧,可以在平常开发中节约出很多 ...

  5. C# JObject和JArray 的分享

    最近在调用别人的搜索引擎接口时遇到了一种返回类型为数组的情况,如 {  "result": [     //根据用户输入搜索匹配到的标题数组         "我是一条新 ...

  6. python的subprocess模块执行shell命令

    subprocess模块可以允许我们执行shell命令 一般来说,使用run()方法就可以满足大部分情况 使用run执行shell命令 In [5]: subprocess.run('echo &qu ...

  7. python第五十四天--第十周作业

    SELECT版FTP:使用SELECT或SELECTORS模块实现并发简单版FTP允许多用户并发上传下载文件 必须使用select or selectors模块支持多并发,禁止使用多线程或多进程 RE ...

  8. 用Python实现数据结构之树

    树 树是由根结点和若干颗子树构成的.树是由一个集合以及在该集合上定义的一种关系构成的.集合中的元素称为树的结点,所定义的关系称为父子关系.父子关系在树的结点之间建立了一个层次结构.在这种层次结构中有一 ...

  9. Windows批处理 -- 打造MySQLCleaner

    批处理打造MySQLCleaner 1. 简介       在我们卸载MySQL数据库的时候,往往除了需要卸载软件,还需要删除各种注册表信息,隐藏文件,卸载服务,否则当我们再次安装MySQL时就会出现 ...

  10. rows的参数

    ds.Tables[0].Rows[0][0].ToString()中的rows后边的那俩参数分别代表什么 第一个0表示行的索引(如果是0就表示第一行,1表示第二行……)第二个0表示列的索引(如果是0 ...