2503: #2327. 「清华集训 2017」福若格斯
Description
小d是4xx9小游戏高手。
有一天,小d发现了一个很经典的小游戏:跳青蛙。
游戏在一个5个格子的棋盘上进行。在游戏的一开始,最左边的两个格子上各有一个向右的青蛙,最右边的两个格子上各有一个向左的青蛙。
每次移动可以选取一个青蛙,向这只青蛙的前方移动一格到空格子中或跳过前方的一个不同朝向的青蛙并移动到空格子中。
为了使你更好地理解这个游戏,我们下发了一个游戏demo作为参考(注意:这个demo中的棋盘大小和题目中并不相同)。
这个游戏本身当然难不倒小d,小d轻松地就解决了这个游戏。但是一个人玩游戏实在是太寂寞了,于是小d找到了小m和他一起玩耍。小d规定,自己只能操控向右的青蛙,小m只能操控向左的青蛙。
小d很快发现,这个游戏想要做到双方轮流行动,就无法达到交换所有青蛙的游戏结局。于是,小d打开了m
个游戏,并规定双方轮流行动,每次选择其中一个游戏并控制自己的青蛙行动一步(不能不动)。小d发现,这么做的话就能够使大部分的游戏最终都交换所有的青蛙了。
由于小d是坑队友高手,所以他们玩了一会之后,就开始互相坑害对方,都希望使对方无法行动。他们约定,当轮到一方行动时,若其所有的青蛙都无法行动,则对方获得游戏的胜利。正当博弈论大师小d计算着谁会成为最后的胜者时,电脑卡死了。小d发现,只能kill掉一些游戏才能使剩下的游戏进行下去了。由于电脑已经卡死了,小d无法自由选择kill掉哪些游戏,只能运行系统自带的随机kill小程序。具体来说,小d运行这个随机kill小程序之后,每个游戏有12\frac{1}{2}21的概率被kill掉,有12\frac{1}{2}21的概率能够继续下去。游戏之间被kill掉的概率是独立的。
小d思考了一番,决定如果运行小程序之后他的胜率过低,就直接重启电脑。这时,小d突然发现自己已经不记得刚才轮到谁行动了,于是他决定综合考虑自己先手和后手的胜率。
小d并不擅长概率论,他想让你告诉他运行小程序后,剩下的局面为小d必胜、小m必胜、先手必胜、后手必胜的概率各为多少,这样他才能更好地决定是否重启电脑。
为了避免精度问题,输出答案乘2m2^m2m之后对998244353998244353998244353取模的结果。
注意:题目并不保证输入的所有m
个状态中小m和小d之前的总行动步数相差不超过1,但是保证不会出现起始状态无法到达的状态。
输入格式
从标准输入读入数据。
我们使用一个长度为5的字符串来表示一个状态,其中,L
表示面朝右的青蛙,R
表示面朝左的青蛙,_
(下划线)表示空格子。例如,初始状态为LL_RR
。
本题含有多组数据,第一行两个整数T,C
(1≤C≤1001\leq C\leq 1001≤C≤100)分别表示测试点编号和数据组数。
对于每组数据,第一行一个整数n
(1≤n≤231\leq n\leq 231≤n≤23)表示不同状态的棋盘个数,接下来n
行每行一个长度为5的字符串sis_isi和一个正整数aia_iai(1≤ai≤1061\leq a_i\leq 10^61≤ai≤106),分别表示棋盘的状态和在该状态下的棋盘的个数。
保证输入的字符串合法且不重复。
输出格式
输出到标准输出。
定义m=∑aim=\sum a_im=∑ai。
对于每组数据,输出一行四个整数,分别表示小d必胜(即L的控制方必胜)、小m必胜(即R的控制方必胜)、先手必胜、后手必胜的概率乘2m2^m2m之后对998244353998244353998244353取模的结果。
样例
样例输入1
0 1
1
LL_RR 1
样例输出1
0 0 1 1
样例输入2
0 1
3
LRRL_ 1
LRR_L 1
LLR_R 1
样例输出2
4 2 0 2
样例输入3
0 1
1
LRRL_ 1000000
样例输出3
421273116 0 0 1
样例1解释
对于样例1,若该游戏没有被kill,双方唯一可能的操作序列为LL_RR -> L_LRR -> LRL_R -> LR_LR -> LRRL_ -> LRR_L -> L胜
,小m先手时同理,故该情况为先手必胜。若该游戏被kill了,双方都没有合法行动,后手必胜。
样例2解释
对于样例2,令这三个棋盘的状态从上到下为A,B,C
,则{A,B,C},{A,B},{A,C},{A}\{A,B,C\},\{A,B\},\{A,C\},\{A\}{A,B,C},{A,B},{A,C},{A}为小d必胜,{C},{B,C}\{C\},\{B,C\}{C},{B,C}为小m必胜,{B},{}\{B\},\{\}{B},{}为后手必胜。
数据范围与提示
保证数据中不会出现从LL_RR
状态无法到达的状态(如RLLR_
),故合法的状态共有23种。
定义 k−k-k−不可达点 为从LL_RR
操作kkk次(双方加起来一共操作kkk次,顺序任意)后依然无法到达的合法状态,如 1-不可达点 为 :全集∖\setminus∖{LL_RR
,L_LRR
,LLR_R
} 共20个, 5-不可达点 为{RLR_L
,RRL_L
,RR_LL
,R_LRL
,R_RLL
}。
对于100%的数据,1≤n≤231\leq n\leq 231≤n≤23,1≤m≤1061\leq m\leq 10^61≤m≤106,1≤C≤1001\leq C\leq 1001≤C≤100,所有可能出现在该数据点的状态均为等概率出现(也就是说你可以认为最后一个点中每种状态的aia_iai之和大约为108/2310^8/23108/23)。
测试点编号( T T T ) | C C C | m m m | 其他 |
---|---|---|---|
1 | =100 | =1 | 无限制 |
2 | =100 | ≤5 \leq 5 ≤5 | 无限制 |
3 | =100 | ≤8 \leq 8 ≤8 | n=m |
4 | =100 | ≤10 \leq 10 ≤10 | n=m |
5 | =100 | 无限制 | n=1 |
6 | =100 | 无限制 | n=1 |
7 | =100 | ≤500 \leq 500 ≤500 | 只含5-不可达点 |
8 | =100 | ≤6×105 \leq6\times 10^5 ≤6×105 | 只含5-不可达点 |
9 | =100 | ≤100 \leq 100 ≤100 | 只含2-不可达点 |
10 | =100 | ≤7×105 \leq7\times 10^5 ≤7×105 | 只含2-不可达点 |
11 | =100 | ≤16 \leq 16 ≤16 | 只含1-不可达点 |
12 | =100 | ≤8×105 \leq8\times 10^5 ≤8×105 | 只含1-不可达点 |
13 | =100 | ≤14 \leq 14 ≤14 | 只含0-不可达点 |
14 | =100 | ≤9×105 \leq9\times 10^5 ≤9×105 | 只含0-不可达点 |
15 | =100 | ≤12 \leq 12 ≤12 | 无限制 |
16 | =100 | ≤5000 \leq 5000 ≤5000 | 无限制 |
17 | =100 | ≤105 \leq 10^5 ≤105 | 无限制 |
18 | =100 | ≤2×105 \leq2\times 10^5 ≤2×105 | 无限制 |
19 | =100 | 无限制 | 无限制 |
20 | =100 | 无限制 | 无限制 |