CT03 Contest#11 智商场 T2 unique
神秘构造体,没智商,真不会
题意
给一个 ,还有长度为 的序列 。要求构造一个 的矩阵,每个位置的数可以是 中的任意整数,并满足,第 行里面不同的种类数有 个,第 列里面不同的种类数有 个。
。
构造
构造的方法
首先在对角线上放一堆 。
然后在对角线循环右移一格的位置,即 的位置,依次放上 。这个东西也是每行、列恰好一个,设每行、列的这个数分别是
枚举位置 。如果当前行、列都不行,放一个全新的颜色(从 开始数);如果行(hang)行(xing)列不行,那把 放这;如果行不行,列行,放一个 ;如果俩都行了,放一个
咋想到
去问了出题人 zzq 大爷,他说他啪的一下就会了,也不太清楚咋想到,我只能自己想了
大概都能想到,先搞一个base,然后做点小修改 (修正主义)
我赛场上写了个爆搜打表,我注意到了 的情况,黑白染色即可。于是开始想,能不能先黑白染色,再改改。
但是这样的坏处在于:杂七杂八的几把玩意太多了,刚开始还能满足,后来越来越不能适应 的变化了
就好像某上个世纪解体的国家
对于构造题来说,我们一开始可以 放一些,不一定全放完,后面再调整
注意到 的条件。我们一开始可以让每行、每列都恰好有两种,然后再加东西
trick:对于方阵的构造,我们可以考虑主对角线放一条,然后右边再放一条;这样可以解决很多行、列上的限制
另一个例题:CF1436B
其实有一个方法是,我们爆搜出来 的解,然后对着这些解,去思考是咋得到的,用手凑一凑;或者也可以直接凭脑子想。总之就是,我们发现我们需要做到下面几件事:
- 放一个“无用元”:我们已经搞定了 ,但是格子还没填满,需要一些无影响的东西来当垃圾
- 单加一行/一列:修改 位置,会同时影响第 行和第 列,但是我们只要搞其中一条,因为另一条已经好了
- 同时加一行/一列:最sb的,直接放一个全新的颜色就行
“无用元”在一番思考过后,也很好搞:主对角线全放 ,然后接下来的所有位置放 都不再会有影响了,此时它就成为了一个 “无用元”
接下来是对于单行/列的修改:如果不考虑那个无用元,其实我们可以在主对角线上放 。这样,比如我们要修改 位置,但只影响第 行,那在这放一个 就行了。第 列本来就有一个 ,再放一个 就不会影响了
那这两个东西都要用主对角线,咋办?其中一个东西让一让位置,整体循环+1,右移一格,就没事了。我们这里把后面那个东西挪了一下。同时,它的值也得平移一些:从 变成 ,因为那个 要去当 “无用元”
总结
- 方阵中的构造方法,见上面
- 在方阵中考虑构造,尤其是行列间相互影响的,可以考虑如何单独影响其中一个
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效