#P1435. 划分哨兵
划分哨兵
划分哨兵
题目描述
相信你一定了解过快速排序这种基于随机化的高效排序算法,在算法中,我们将从当前序列中,随机选择一个位置的数作为哨兵,然后采用双指针的技巧,通过不断对哨兵左右两边的数进行交换,从而使得哨兵左边的数全部小于哨兵,而其右边的数全部大于哨兵。完成后,我们依次对哨兵左边和右边的部分再次重复上述过程,直到最后不存在哨兵以外的部分,则向上回溯,最后完成对整个序列的排序。
Orange在学习快速排序,他对其中哨兵的划分产生了非常强烈的兴趣,认为哨兵在对于排列的快速排序中具有某些重要性质。对于一个排列 来说,Orange定义哨兵为排列中的某个特殊位置的值 ,在他前面的数全部小于它,在他后面的数全部大于他。形式化的说, 是哨兵,当且仅当 。
对于一个 -排列 ,Orange定义 表示 作为排列中唯一的哨兵的不同排列的种类数量。你的任务是,帮助Orange求出每个 的值,答案可能很大,你只需要输出答案 即可。
-排列指的是这样一个序列:对于一个长度为 的序列,其中从 开始到 的每个数都不重不漏地出现了恰好一次。
输入格式
输入一行,为一个整数 ,表示排列长度。
数据范围
输出格式
输出一行,包含 个整数,其中第 个数为 的值。
样例 #1
样例输入 #1
2
样例输出 #1
0 0
提示
样例解释
当 时:
在所有 是哨兵的 -排列中,只有 满足 是唯一的哨兵,即 。
在所有 是哨兵的 -排列中,不存在任何一种排列使得 是唯一的哨兵,即 。
在所有 是哨兵的 -排列中,只有 满足 是唯一的哨兵,即 。
因此,答案为1 0 1。