CT03 Contest#11 智商场 T2 unique

神秘构造体,没智商,真不会

题意

给一个 \(n\),还有长度为 \(n\) 的序列 \(a_i,b_i\)。要求构造一个 \(n\times n\) 的矩阵,每个位置的数可以是 \([1,n^2]\) 中的任意整数,并满足,第 \(i\) 行里面不同的种类数有 \(a_i\) 个,第 \(i\) 列里面不同的种类数有 \(b_i\) 个。

\(2\le a_i,b_i\le n\le 500\)

构造

构造的方法

首先在对角线上放一堆 \(1\)

然后在对角线循环右移一格的位置,即 \((i,i\%n+1)\) 的位置,依次放上 \(2,3...n+1\)。这个东西也是每行、列恰好一个,设每行、列的这个数分别是 \(p_i,q_i\)

枚举位置 \((i,j)\) 。如果当前行、列都不行,放一个全新的颜色(从 \(n+2\) 开始数);如果行(hang)行(xing)列不行,那把 \(p_i\) 放这;如果行不行,列行,放一个 \(q_j\);如果俩都行了,放一个 \(1\)

咋想到

去问了出题人 zzq 大爷,他说他啪的一下就会了,也不太清楚咋想到,我只能自己想了

大概都能想到,先搞一个base,然后做点小修改 (修正主义

我赛场上写了个爆搜打表,我注意到了 \(a_i=b_i=2\) 的情况,黑白染色即可。于是开始想,能不能先黑白染色,再改改。

但是这样的坏处在于:杂七杂八的几把玩意太多了,刚开始还能满足,后来越来越不能适应 \(a,b\) 的变化了

就好像某上个世纪解体的国家

对于构造题来说,我们一开始可以 放一些,不一定全放完,后面再调整

注意到 \(a_i,b_i\ge 2\) 的条件。我们一开始可以让每行、每列都恰好有两种,然后再加东西

trick:对于方阵的构造,我们可以考虑主对角线放一条,然后右边再放一条;这样可以解决很多行、列上的限制

另一个例题:CF1436B

其实有一个方法是,我们爆搜出来 \(n=3\) 的解,然后对着这些解,去思考是咋得到的,用手凑一凑;或者也可以直接凭脑子想。总之就是,我们发现我们需要做到下面几件事:

  • 放一个“无用元”:我们已经搞定了 \(a,b\),但是格子还没填满,需要一些无影响的东西来当垃圾
  • 单加一行/一列:修改 \((i,j)\) 位置,会同时影响第 \(i\) 行和第 \(j\) 列,但是我们只要搞其中一条,因为另一条已经好了
  • 同时加一行/一列:最sb的,直接放一个全新的颜色就行

“无用元”在一番思考过后,也很好搞:主对角线全放 \(1\),然后接下来的所有位置放 \(1\) 都不再会有影响了,此时它就成为了一个 “无用元”

接下来是对于单行/列的修改:如果不考虑那个无用元,其实我们可以在主对角线上放 \(1,2,3...n\)。这样,比如我们要修改 \((i,j)\) 位置,但只影响第 \(i\) 行,那在这放一个 \(j\) 就行了。第 \(j\) 列本来就有一个 \(j\),再放一个 \(j\) 就不会影响了

那这两个东西都要用主对角线,咋办?其中一个东西让一让位置,整体循环+1,右移一格,就没事了。我们这里把后面那个东西挪了一下。同时,它的值也得平移一些:从 \(1,2...n\) 变成 \(2,3...n+1\),因为那个 \(1\) 要去当 “无用元”

总结

  1. \(n\times n\) 方阵中的构造方法,见上面
  2. 在方阵中考虑构造,尤其是行列间相互影响的,可以考虑如何单独影响其中一个
posted @ 2021-07-21 16:27  Flandre-Zhu  阅读(57)  评论(1编辑  收藏  举报