Mô tả bài toán
Cho một số dưới dạng chuỗi s. Hãy tìm tổng của tất cả các chuỗi con của s. Kết quả có thể rất lớn, trả về modulo 10^9 + 7.
Ví dụ
Nếu đầu vào là s = "268", thì đầu ra sẽ là 378 vì các chuỗi con là "2", "6", "8", "26", "68", "268", tổng = 2+6+8+26+68+268 = 378.
Giải thuật
- Khởi tạo
M = 10^9 + 7,sum_val = 0,B = 1,res = 0. - Duyệt
itừlen(s)-1xuống 0:res = (res + int(s[i]) * B * (i + 1)) % Msum_val -= int(s[i])B = (B * 10 + 1) % M
- Trả về
res.
Triển khai Python
def solve(s):
M = 10**9 + 7
sum_val = 0
B = 1
res = 0
for i in range(len(s) - 1, -1, -1):
res = (res + int(s[i]) * B * (i + 1)) % M
sum_val -= int(s[i])
B = (B * 10 + 1) % M
return res
s = "268"
print(solve(s))
Đầu vào
"268"
Đầu ra
378