码迷,mamicode.com
首页 > 其他好文 > 详细

构造口胡

时间:2020-04-19 12:55:53      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:怎么   杂题   序列   column   strong   两种   不难   好的   style   

对称性原理——翻折法:如果两条路径相交,可以通过交换起点(终点)变成两条不相交的路径。

  $eg$.(这题考过)找两条$(1,1)$->$(n,m)$的路径,要求除起点终点都不相交:首先拆成两个起点终点的路径,如果独立,直接组合数;对于相交的情况,交换起点(终点),一定会有一个交点,包含了所有相交的情况(相当于把一开始的两条相交路径的第一个交点以前的部分交换)。两个组合数相减就是答案。

本来是要看杂题2的,但是看了两道给我劝退了,我就溜来了构造,发现根本想不到,看了题解,哦,不难啊......总结来说,你需要拥有手模样例的能力+强大的找规律+超强的脑洞(我后悔了,我应该去看杂题的)

$Coloring Torus$:对于一个$n*n$的网格,称$(r,c)$为处于第$r+1$行,第$c+1$列的格子。一个对网格的好的$k$染色是满足下述条件的染色方案:
  • 每个格子被染成 $1, 2, 3,...,k$这$k$种颜色之一。
  • $k$种中的每种颜色都被至少一个格子使用。
  • 对于任意颜色$i,j(1≤i≤ k,1≤j≤k)$,满足所有颜色为$i$的格子,其相邻的颜色$j$的格子个数相同。这里,与$(r, c)$相邻的格子为$((r-1) mod n,c),((r+1) mod n,c),(r,(c-1) mod n),(r,(c+1) mod n)$(如果一个格子多次出现,那么会算多次)。
给出 $k(1 ≤ k ≤ 1000)$,选择一个$1 ≤ n ≤ 500$,任意构造一个对$n*n$的网格的好的$k$染色。
题解:感叹一下敏锐的观察力。手模几个小的,
   $n=4,k=4:$                    $n=4,k=8$                       $n=4,k=7$
技术图片技术图片技术图片

 

然后通过你敏锐的观察力,发现他们有些许的规律

若$k=n$,$a[i][j]=(i+j-2)%n+1$

若$k=2*n$,奇数行:$a[i][j]=(i+j-2)%n+1$;偶数行:$a[i][j]=(i+j-2)%n+n+1$

若$n<k \leq 2n$:在$k=2n$的基础上把大于$k$的换成$x-n$即可。

接下来就是怎么找到一个$n$使得$n \leq k \leq 2n$。令$n=2*\left \lceil \frac{k}{4} \right \rceil $即可。特判$k=1$

 

$Robot Arms$:$n+1$个节点,$n$条长度为$d[i]$的边,第$i$步可以向上下左右任意方向走$d[i]$步,要求从$(0,0)$出发走n次最终能到达$(x_i,y_i)$,输出方案。
题解:题目好绕啊。加入已有一个$d$序列,每次运动,坐标加减的值是一样的,最终能到达的地方的$x+y$奇偶性是相同的,所以$m$个目标节点的$x_i+y_i$必须是一样的,否则不合法。关于$d$序列的构建,考虑优秀的二进制。令$d[k]=2^{40-k}$    $k \leq 40$。发现这样能到达的地方横纵坐标和一定是奇数(除$1$外全部都是偶数),如果$x_i+y_i$为偶数的话,在d的最后再加一个$1$就好。这样的话,每一步能到达的范围会形成一个菱形(画个坐标轴理解理解),保证左右地方都能被经过。对于输出走的方式,反过来从$(x_i,y_i)$走到$(0,0)$,这个过程考虑贪心。每次选择$x,y$中较大的那个,向靠近$(0,0)$那个方向走一步,注意输出的是反着的。
 
 
$Not Same$:大小为 $n $的集合 $a1, a2, . . . , an$,满足 $1 ≤ ai ≤ n$。每次你可以选择一个子集的元素并且把这个子集的元素都$1$,你需要在至多 $n + 1 $次操作之内把所有数变成 $0$。每次选择的子集不能相同。$1 ≤ n ≤ 1000$
题解:列一个$n+1$行,$n$列的$0/1$矩阵,第$i$行第$j$列为$1$代表第$i$次的集合里有$j$。把$a$数组降序排列,然后以对角线为分界线往上填$a[i]$个$1$,如果格子不够,再回来从最下边一行接着填。这样一定不会有集合是相同的。证明感性理解。偷张图好理解
技术图片

 

$Inverse of Rows and Columns$:给定一个 $n × m$ 的 $01$ 矩阵,你可以选择任意行翻转任意列翻转($0$变$1$,$1$变$0$)。求最后能否将整个矩阵变成有序的。有序即$a_{1,1} \leq a_{1,2} ...\leq a_{2,1}...\leq a_{n,m}$
题解:首先特判$n=1$。为满足题目的条件,最终的矩阵一定满足两个条件中的一个:$A.$第一行全是$0$;$B.$最后一行全是$1$。两种情况分别来一遍,那个符合那个就是答案,都不符合就无解。以$A$为例,若$a[1][i]=1$,则翻转第$i$列。翻转完后若存在答案,有两种情况:$1.$所有行都只有$0$或只有$1$,那么就全翻成一样的就好;$2.$有且仅有第$k$行同时包含$0$或$1$,且$0$全部在左边,$1$全部在右边,或者反过来,只需要把第$k$行翻成前$0$后$1,2~k-1$行翻成$0$,$k+1~n$翻成$1$。$B$是类似的。

 

 

构造口胡

标签:怎么   杂题   序列   column   strong   两种   不难   好的   style   

原文地址:https://www.cnblogs.com/jrf123/p/12730852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!