[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\) 中任意选择一个数字,按顺序依次排开.

posted @ 2024-02-14 19:42  HaneDaniko  阅读(48)  评论(3编辑  收藏  举报