其他分享
首页 > 其他分享> > 构造

构造

作者:互联网

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。

 

 

 

 

标签:一堆,构造,节点,行都,yt,xt,2k
来源: https://www.cnblogs.com/2018hzoicyf/p/12730876.html