1. 程式人生 > >牛客網線上程式設計(15):數列還原-python

牛客網線上程式設計(15):數列還原-python

題目描述

牛牛的作業薄上有一個長度為 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

程式碼實現 

 

from itertools import permutations

n,k=map(int,input().split())
A=list(map(int,input().split()))

result=0
k_=0
pos=[i for i in range(n) if A[i]==0]
queshi=[i for i in range(1,n+1) if i not in A]

for i in range(1,n):
    if i not in pos:
        for j in range(i):
            if 0<A[j]<A[i]:
                k_+=1

for lis in permutations(queshi):
    K=0
    for i,num in enumerate(lis):
        for j in range(pos[i]):
            if 0<A[j]<num:
                K+=1
            elif A[j]==0:
                if lis[pos.index(j)]<num:
                    K+=1
        for j in range(pos[i],n):
            if num<A[j]:
                   K+=1
    if K+k_==k:
        result+=1
print(result)