HihoCoder 1579 組合數學

2021-08-08 20:37:06 字數 1022 閱讀 5725

問符合乙個字尾陣列的小寫字串組合有多少種

首先觀察字尾陣列,4 3 2 5 1。可以得到一些資訊:

1、4<3<2<5<1一定是符合的

2、至於等號關係需要判斷該位置後面的字串與下乙個位置後面字串的關係,如果該位置後面字串》下乙個位置後面字串,那麼等號一定無法取到

3、關於後面字串大小的判斷,我們可以再次利用字尾陣列進行判斷,我們可以搞乙個陣列,記錄以x開始的字尾在陣列中的位置。

4、我們可以記錄一下小於號的個數,如果小於號》=26,那麼無解

之後就是乙個組合數學問題了,由於有些地方可以取到等號,而有些地方不可以,我們可以將這個問題轉化為允許部分空盒子的隔板問題(有小球26+1個,乙個隔板代表乙個位置,取隔板前小球代表的字元,補乙個小球,使得隔板可以選到』z』,利用空盒子隔板法的思想還要再補k個小球,這裡不再闡述)。於是可以利用公式c(n,26+k)求出答案(n為字元個數,k等號個數)。

cs=int(input())

for s in range(cs):

n=int(input())

# print n

li=list(map(lambda x:x-1,map(int,raw_input().split())))

rev=[0]*(n+1)

rev[n]=-1

sum=0

for i in range(n):

rev[li[i]]=i

for i in range(n-1):

if rev[li[i]+1]>rev[li[i+1]+1]:

sum+=1

# print sum

ans=1

if sum>=26:

print

0else:

k=n-1-sum

for i in range(26+k,n,-1):

ans*=i

for i in range(1,26+k-n+1):

ans/=i

print ans

12 組合模式

1.說明 請參見本文第一章 2.組合模式說明 組合模式 將物件組合成樹形介面以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件具有一致性。為了保持整體和區域性的一致性,整體和區域性具有相同的介面,從而避免判斷該節點是整體還是區域性。介面可以實現為空。使用範圍 在需求中體現部分與整...

15 組合模式

定義 將物件組合成樹形結構以表示 部門 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。適用 當發現需求中是體現部分與整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,同意地適用組合結構中的所有物件時,就應該考慮用組合模式了。asp.net的treevie...

10組合模式

組合模式 設計模式其實很簡單 筆記 定義 將物件組成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。理解 樹和子樹,即整體與部分。在樹形結構中,部分和整體有著類似或相同的結構,所以可以將部分和 整體一致對待 樹中分支節點與葉子節點的抽象父類 publi...