数列还原

这是一道关于数列还原的问题,牛牛有一个包含1到n的排列A,其中有不超过10个位置看不清。题目要求找出所有使得排列中顺序对数量为k的合法排列数目。输入包括n和k,以及看不清的排列A。解决方案是通过全排列找到未使用的数字,对它们进行排列,然后将结果放置回原位置并检查顺序对是否满足条件。
摘要由CSDN通过智能技术生成

题目描述
牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和 k(1 <= n <= 100, 0 <= k <= 1000000000),接下来的 1 行,包含 n 个数字表示排列 A,其中等于0的项表示看不清的位置(不超过 10 个)。
输出描述:
输出一行表示合法的排列数目。
示例1
输入
5 5
4 0 0 2 0
输出
2

这个题使用全排列去做,首先找到哪些数字尚未被使用,然后对这些数组进行全排列,注意,这里空缺数字不会超过10,全排列复杂度(n!)可以忍受。随后把这些排列好的数字放回到原来的空缺位置,统计一下顺序对个数,如果满足要求计数器加1即可。

import copy

permutats = []
def permutation
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值