【发布时间】:2017-02-17 13:45:24
【问题描述】:
我想找出nnumber 的所有排列的个数。编号将从1 到n。给定条件是每个ithposition 最多可以有Si 的编号,其中Si 是为数字的每个位置提供的。
1<=n<=10^6
1<=si<=n
例如:
n=5
那么它的所有五个元素将是
1,2,3,4,5
给定每个位置的 Si 为:
2,3,4,5,5
它表明在:
1st位置可以有1 to 2即1,2,但不能是3 to 5中的数字。
相似地,
在2nd 位置只能有编号1 to 3。
在3rd 位置只能有编号1 to 4。
在4th 位置只能有编号1 to 5。
在5th 位置只能有编号1 to 5。
它的一些排列是:
1,2,3,4,5
2,3,1,4,5
2,3,4,1,5 etc.
但这些不可能:
3,1,4,2,5 As 3 is present at 1st position.
1,2,5,3,4 As 5 is present at 3rd position.
我不知道在给定条件下计算所有可能的排列数量。
【问题讨论】:
-
这是一些编程比赛吗?还是裁判问题?
-
它不属于任何正在运行的编码竞赛。但它需要我的编码实现。
-
@coderredoc 已经提到了 n 和 Si 的给定限制。
-
您需要只需要排列的数量 还是排列本身?对于您的示例,究竟有多少排列是可能的?
-
@Yuriy 只有排列的次数。
标签: c++ algorithm count permutation