背景
In Memory of F.
题目描述
题面还是简单一点好。
- 给定 n,m,以及一个长为 n+m 的 01 串 S。
- 对于 01 串 T,定义 f(T) 为 S 的最长的前缀的长度,使得该前缀是 T 的子序列 †。
- 对于每个 恰包含 n 个 1 和 m 个 0 的 01 串 T,求 f(T) 的和。答案对 2933256077‡ 取模。
†:请注意,子序列可以不连续。换句话说,a 是 b 的子序列,当且仅当在 b 中删去 ≥0 个字符后,可以得到 a。注意,空串总是任何串的子序列。
‡:模数为质数。
输入格式
第一行包含两个整数 n,m。
第二行包含一个长度为 n+m 的 01 串 S。
输出格式
输出一行一个整数,表示答案对 2933256077 取模后的结果。
2 1
000
3
5 5
0010111011
1391
提示
「样例解释 #1」
所有可能的序列有且仅有公共序列 0。因为恰有 3 种不同的 T(110,101,011),所以答案为 1×3=3。
「数据范围」
对于所有测试数据,保证 1≤n,m≤3×106。
本题采用捆绑测试。
- Subtask 0(13 points):max(n,m)≤5。
- Subtask 1(13 points):max(n,m)≤100。
- Subtask 2(34 points):max(n,m)≤3×103。
- Subtask 3(40 points):无特殊限制。