[TK] 一心净士 hzoj-tg-937-2
万元申万的(不是)
嗯... 另外,这道题其实叫一心净士(shi) 而不是一心净土.
剖析
我们注意到题目要让我们使最小的自然数最大,那么我们的每一个区间都要从零开始放. 显然,假如我们所有区间里最小的一个的长度为 \(n\) ,那么我们最多只能数到 \(n-1\) ,因为再往下数的话,最短的一个区间就没地方放了.
所以说,这个题的关键就在于:如何放置这些数字,能够使所有的所有区间内都包括 \(0\) 到 \(n-1\) 之间的所有数.
对于这道Special Judge, 显然我们有很多种构造方式,题解中的办法固然正确,但是在这里给出一个更简单的通用解.
思路
好的,我们先不去考虑这道题,而是来考虑一道更简单的题:
如何排列一个无限长度的数列,使对于任意的 \(k\) 值,任取一个长度为 \(k\) 的区间,都包含 \(0\) 到 \(k-1\) 间的全部数字.
或者说给个实例:
写出一个数列,任取一个长度为 2 的区间,都包含 0 和 1 .
你肯定会这么写:0101010101010101
而 \(k=3\) 时你肯定会这么写: 012012012012012012
我们会发现,不仅任取一个长度为 \(k\) 的区间,都包含 \(0\) 到 \(k-1\) 间的全部数字,而且对于任意长度大于 \(k\) 的区间也有这个规律.
所以说这个题的简单构造方式就出来了:
首先找到最小长度 \(k\) .
从 \(0\) 到 \(k-1\) 中任意选择一个数字,按顺序依次排开.