和為9的不連續子序列個數
阿新 • • 發佈:2022-04-17
有一個字串,明明想取該字串的子序列(子序列可以不連續),使得改子序列是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 deffind(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])