0%

[QOJ10037] Build Well

感觉好牛的题。

题目链接

题意

你现在需要建造一个周长为 的水井,现在有 种可用的砖块长度,第 种为

水井的砖块由很多层构成,如果存在相邻两层的某个位置,在这两层同时是砖缝,我们就认为这个水井是不稳固的。

构造一组放置砖块的方案,每一种砖块都可以使用任意多次。显然只需要构造相邻两层的方案即可。

题解

首先考虑如果只需要建造一层水井怎么做,显然直接 dp 优化一下能做到

那么假设现在存在一组建造一层水井的方案,并且这个方案没有使用长度为 的砖块,问题就已经解决了。

因为我们可以直接把这个方案复制一遍,然后往右偏移

假设不存在这样的方案,那么如果此时长度为 的方案还不是可用的,显然整个问题无解。

现在我们考虑在如下限制下做出构造:上下两层使用的砖块顺序完全相同,并且偏移为 ,但引入一种全新的“组合块”。

一个组合块为一个长度为 的砖块加上不超过 个长度为 的砖块组成。

在第一行,其排列方式为先放长度为 的砖块,再放长度为 的砖块,第二行先放 再放

假如这样能跑出一组解,那么整个问题就结束了。现在我们要证明若整个问题有解,则存在一组这样的构造方式。

首先考虑这组合法的方案存不存在上下偏移差为 的位置,如果没有的话就转到至少有一个位置。

现在整个环有至少一个上下差为 的位置,把整个环分成了若干份,现在我们对这些部分分别进行调整。

对于某一个部分来说,若其现在的方案中某一行没有使用长度为 的砖块,那么直接把另一行调整一下就好了。

否则,设两行长度均为 ,并且其中使用砖块较少的一行使用了 块砖,那么这一行会产生 个缝。

我们可以得到 ,即

在考虑,设这一行有 个长度 的砖块,则这一行有 个长度为 的砖块。所有长度 的砖块长度和为

考虑这些长度 的砖块最多能和多少长度为 的砖块进行组合,答案为

也就是说我们完全可以用这些砖块拼成组合块然后进行构造。证毕。

时间复杂度

update:qoj 上 T 了,你需要分治 NTT。