构造趣题几道
对于一个 的矩阵, 在其中各出现一次。
定义一条好路径为一个坐标序列 满足 是「山谷」并且 与 相邻,且坐标上的数字单调增。
「山谷」表示这个点的数字比与他相邻的点都小,相邻是四联通。
对于所有满足条件的矩阵,求好路径最小值,并构造方案。
来源:IMO 2023 T6
还是蛮有趣的。
小的向大的连边,dag 的路径计数,随便构造大概都是指数级的,肯定要尽量构造成树,这样路径比较唯一。
首先起点只有一个肯定优,不然隔开两个点能到范围的部分会计算多次,那么这个起点肯定可以到达所有点,不然就会有多个起点,因此答案是 级别的。
由于路径中间出现环很容易乘起来到达指数级,所以考虑只在树的叶子处形成环,也就是我们选定若干点作为终点,把终点去掉之后,剩下的点形成一棵树。
还需要满足的条件是终点不能相邻。
考虑一下这样构造的答案,注意到总点数已知,总边数已知,去掉这些点只要满足剩下的点联通并且点边数满足条件就一定是树,而一个终点对答案增加的贡献与对点边数产生的贡献是相同的,所有合法方案的答案是相同的,计算后可以得到是 。
然后考虑构造,由于终点不能联通,又要把其他点隔开,所以剩余点可以构造为若干条横着的「鱼骨」,然后左边串联起来即可。
1 | 0111111 |
个人要打比赛,每两个人一场,一天比一场,总共 天。
设第 个人打的第一场比赛在第 天,最后一场在 天,求 ,并构造方案。
来源:IMO2018 预选题 C5 。
注意:这里是一个 OI 化的题解,构造方案无一定合法的证明。
首先一个显然的观察, 不会存在严格包含的区间,不然可以调整使得答案不变。
考虑给出一组区间,如何构造方案。
先左端点排序,标号为 。
那么直接贪心,左端点处加入区间,然后每次弹出右端点最小的区间,优先队列维护即可。
但是没啥用,还是要去构造方案,这个构造用增量法不好搞,考虑直接找其下界。
观察一下贪心放的位置的本质,对于 来说,相当于是把 放在了 之后第一个空的位置,然后对于 ,就是把 放在 后面第一个空的位置,需要满足不能放到 后面的地方。
因此容易观察出一个 与 直接的关系,具体的,设 ,我们去找 的一个值。
模拟上面的过程,容易得到:
开始猜了一个答案是 ,然后爆。
差分约束一下?没啥用。
注意到由于左端点全部小于右端点,所以只要找一组左右的匹配求 即可。
瞎 jb 找规律,发现 是最大的,打表观察出是答案。
考虑构造,由于 满足交叉对称,所以想构造出满足所有约束的区间,尽量要满足 关于 对称,此时有取到他们距离的具体值,因此直接构造即可。