zoukankan      html  css  js  c++  java
  • 构造

    Coloring Torus 

      如果要构造 n = k 的,那么直接 构造一个第 i 行为 i 的就好了。

    那么 n<k<=2n 呢?

    我们考虑斜着的列。

      如果第 i 个斜列放 i ,那么也可以达到 n = k 的目的。

      如果第 i 个斜列间隔放两种数,那么仍然可以满足条件。这时候就可以做到 k属于 [n,2n] 了。

    放个图便于理解。(下图蓝线穿过的列是特殊的列)

     

     Robot Arms

    如果这些点(xt,yt),xt+yt的奇偶性不同那无解

    如果xt+yt为偶数,我们先让d1=1,这样转换为xt+yt为奇数的情况。

    奇数怎么做?二进制构造。

    一:考虑d(k)=1,2,4,...,2k

    这样的集合,能走到所有|x|+|y|≤2k+1−1的点(且和为奇数)

    对于d(k)−d(k−1)

    的区域(新区域),直接走一步就到了(如上图红到紫)

    对于原来就能到达的区域,我们可以从内部走到内部。

    二:考虑怎么找到方案。

    证明:d(k)

    能走到到点满足min(|x|,|y|)≤2k−1

    证明大概就是最值在|x|=2k−1,|y|=2k时取到,调整发现不优。

    我们只要每次从d(k)走到d(k−1)即可,到d(0)时就成功了

    通过画图分析,每次把绝对值大的减小就可以从d(k)走到d(k−1)。我们上面是d(k)走到d(k−1),实际上是反过来的,因此输出的字母要注意取反。

     

     

    Inverse of Rows and Columns

    挺简单的一道题,大概算暴力模拟

    当n>1时,为了满足题目的条件,最后的矩阵必须满足两个条件中至少一个:A、第一行全是0 B、最后一行全是1

    按照两种情况做两遍(强制使其中一个情况满足)就可以得到答案了吧,以A为例:

    若a[1][i]=1,则第i列标记为需要一次操作,然后对之后每一行判断操作后的情况

    有两种情况存在答案:

    1、对a[1][i]=1的列操作一次后,所有行都只包含0或1,此时可选择将所有行都翻成只有0(或只有1)

    2、仅有一行k同时包含0和1,且0和1都挤在一堆(左边一堆0,右边一堆1或左边一堆1,右边一堆0),对于1都在左边的情况对第k行操作一次,然后1——k-1行都翻成0,k+1——n行都翻成1

    然后以类似方法对B操作一次,如果两种都不能得出答案print(-1)

     

    Construct the Binary Tree

    给出 n 个节点深度和为 d问你是否可以构成一个二叉树,可以的话输出全部节点深度。
    全部节点组成一条链的话深度和肯定最大,我们就先组成一条链,然后每次移动最下面那个节点,看看移动到哪里合适,然后判断是否可以组成深度和为 d。

     

     

     

     

  • 相关阅读:
    关于json中对象的删除
    JDBC操作数据库 封装好的工具类
    json <--->List集合,实体类 之间的相互转换
    java--->>发送邮件
    登陆的过滤器
    Hadoop + Spark 在CentOS下的伪分布式部署
    CentOS和ubuntu修改hostname的区别
    ubuntu 用户管理 adduser vs useradd
    hadoop2.6.1源码编译64位
    MySQL Binlog详解
  • 原文地址:https://www.cnblogs.com/2018hzoicyf/p/12730876.html
Copyright © 2011-2022 走看看