P6212 「SWTR-4」Lining up

题目背景

作为班长的小 S 在指挥操场上的一群同学排队,Lining up 可不是一件容易的事情。

题目描述

操场上有排成一列的 $n$ 个同学,每个同学要么是男生,用 ```B``` 表示;要么是女生,用 ```G``` 表示。 我们定义两个相邻的同学的满意度如下: - 如果两个相邻的同学的性别相同,那么就会像普通同学一样聊天,产生 $0$ 点满意度。 - 如果前面的同学是男生,后面的同学是女生,那么就不会有任何事件发生。同学们都很活跃,他们不希望这么无聊,产生 $-b$ 点满意度。 - 如果前面的同学是女生,后面的同学是男生,那么他们就会聊得很开心,产生 $a$ 点满意度。 由于小 S 是近视眼,所以他无法分辨有些同学的性别,用 ```?``` 表示。 为了提高自己在大家心目中的地位,小 S 想保证所有相邻同学的满意度之和不小于 $m$。 他想知道满足“所有相邻同学的满意度之和不小于 $m$”的概率是多少,对 $10^9+7$ 取模。

输入格式

第一行,四个整数 $n,m,a,b$ —— 意义见题目描述。 第二行,一个长度为 $n$ 的字符串 $s$ 表示队列 —— 第 $i$ 个字符表示**从前往后**数第 $i$ 位同学。

输出格式

一行,表示概率。

说明/提示

【样例 $1$ 说明】 共有 $1$ 个满足题意的队形 $\tt BGB$。概率为 $\frac{1}{2} \bmod (10^9+7)=500000004$。 【样例 $2$ 说明】 共有 $6$ 个满足题意的队形 $\tt BBB,BGB,GBB,GBG,GGB,GGG$。概率为 $\frac{6}{8} \bmod (10^9+7)=750000006$。 【样例 $5$ 说明】 真实答案为 $\dfrac{29}{64}$。 【数据范围与约定】 **本题使用捆绑测试。** Subtask 编号 | $n\leq$ | 特殊性质 | 分数 :-: | :-: | :-: | :-: $1$ | $2020$ | 没有```?``` | $8$ $2$ | $20$ | 无 | $17$ $3$ | $250$ | 无 | $29$ $4$ | $2020$ | $a=1,b=1$ | $10$ $5$ | $2020$ | 无 | $36$ 对于全部数据,$2 \leq n \leq 2020$,$1 \leq |m| \leq 10^{12}$,$1 \leq a,b \leq 10^9$,$s_i \in \tt{\{B,G,?\}}$。 **请注意特殊的空间限制。** 【Tips】 如果你不会对分数取模,可以看看[这里](https://www.luogu.com.cn/problem/P2613)。 【Source】 [Sweet Round 04](https://www.luogu.com.cn/contest/26414)$\ \ $D idea:[ET2006](https://www.luogu.com.cn/user/115194),std:[Isaunoya](https://www.luogu.com.cn/user/96580),验题:[Isaunoya](https://www.luogu.com.cn/user/96580) & [FrenkiedeJong21](https://www.luogu.com.cn/user/203968) & [chenxia25](https://www.luogu.com.cn/user/138400)