AT_abc158_e [ABC158E] Divisible Substring

题目描述

高桥君有一个由数字 $0$ 到 $9$ 组成、长度为 $N$ 的字符串 $S$。 高桥君喜欢素数 $P$,他想知道,在 $S$ 的所有 $N \times (N + 1) / 2$ 个非空连续子串中,有多少个子串在视为十进制整数时能够被 $P$ 整除。 注意,子串可以以 $0$ 开头;即使作为字符串或整数相等,只要在 $S$ 中的位置不同,也要分别计数。 请你帮高桥君计算这个数量。

输入格式

输入以以下格式从标准输入读入。 > $N$ $P$ $S$

输出格式

输出 $S$ 的所有非空连续子串中,能被 $P$ 整除的子串的个数。

说明/提示

## 限制条件 - $1 \leq N \leq 2 \times 10^5$ - $S$ 只包含数字 - $|S| = N$ - $2 \leq P \leq 10000$ - $P$ 是素数 ## 样例解释 1 $S = 3543$。$S$ 的所有非空连续子串共有 $10$ 个,如下所示: - `3` 可以被 $3$ 整除。 - `35` 不能被 $3$ 整除。 - `354` 可以被 $3$ 整除。 - `3543` 可以被 $3$ 整除。 - `5` 不能被 $3$ 整除。 - `54` 可以被 $3$ 整除。 - `543` 可以被 $3$ 整除。 - `4` 不能被 $3$ 整除。 - `43` 不能被 $3$ 整除。 - `3` 可以被 $3$ 整除。 其中能被 $3$ 整除的有 $6$ 个,所以输出 $6$。 ## 样例解释 2 $S = 2020$。$S$ 的所有非空连续子串共有 $10$ 个,并且全部都能被 $2$ 整除,所以输出 $10$。注意允许以 $0$ 开头的子串。 由 ChatGPT 4.1 翻译