1. 程式人生 > 其它 >和為9的不連續子序列個數

和為9的不連續子序列個數

有一個字串,明明想取該字串的子序列(子序列可以不連續),使得改子序列是9的倍數,子序列可以包括前導0,一共可以取多少個合法子序列,輸出的字串長度不超過200000,僅由‘0’-‘9’組成

 

第一種,和為9的倍數

9這個數字很特殊,為什麼呢?

18 = 9+1+8  = 1+8 也是9的倍數,所以問題就轉為為:找一串數字和為9的倍數的可不連續子序列

 

輸入:

1 1 8 8 

輸出

5

 

輸入:

9 1 1 0 6 4 8 7 2 3 1 0 1

輸出

879

 

 1 arr = list(map(int, input()))
 2 k = 9
 3 res =[]
 4 
 5 def
find(i, pre): 6 if i >= len(arr) : return 7 pre += arr[i] 8 if pre%k==0: 9 res.append(pre) 10 find(i+1, pre) 11 pre -= arr[i] 12 find(i+1, pre) 13 14 pre = 0 15 vis = [0]*len(arr) 16 find(0, pre) 17 print(len(res))

 

還有一種寫法就是

from copy import deepcopy
arr = list(map(int, input()))
k 
= 9 res =[] ans = [0]*9 def find2(): for num in arr: tmp = deepcopy(ans) #記錄前一次狀態 ans[num%9] += 1 #每新加一個的數,更新下餘數陣列ans for i in range(9): #對於[0-8] ans[(num+i)%9] += tmp[i] #更新num加進來,each values of ans changes find2() print(ans[0])