牛客網線上程式設計(15):數列還原-python
阿新 • • 發佈:2018-11-10
題目描述
牛牛的作業薄上有一個長度為 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)