Logo 邂逅编程之美

UOJ

时间限制:1 s 空间限制:1024 MB
Statistics

时间限制 / 1.0s

空间限制 / 1024MB

题目描述

数轴上有 $n$ 个小球,相邻两个小球的间距相同。每个小球有两种属性:量子 (A) 和虚数 (B),带有正电荷或者负电荷。一开始所有的小球都是量子 (A) 属性。

通过某种方式给所有的小球初速度,使得带正电荷的小球向左,反之则向右运动。我们认为所有小球的速度相同,且均沿直线运动。

当两个小球到达同一位置时,会发生弹性碰撞,沿着相反的方向按照原有速度继续运动。同时,这两个小球的电性会发生反转,属性也会发生反转。

例如:$\text{A}^-$ 和 $\text{B}^+$ 相撞后,$\text{A}^-$ 会变成 $\text{B}^+$,$\text{B}^+$ 会变成 $\text{A}^-$,并各自沿着相反的方向运动。

定义一种摆放方式的权值为,经过足够长的时间后,在左侧收集到的虚数 (B) 小球个数。

现在已经确定了一些小球的电性,剩下的小球可能带正电,也有可能带负电。请求出对于所有可能方案的权值之和。你需要将答案对 $998244353$ 取模。

输入格式

输入一行一个长为 $n$ 的字符串 $s$,代表从左到右小球的电性。具体而言:

  • 若 $s_i$ 为 +,则第 $i$ 个小球带正电;
  • 若 $s_i$ 为 -,则第 $i$ 个小球带负电;
  • 若 $s_i$ 为 ?,则第 $i$ 个小球可能带正电,也可能带负电。

输出格式

输出一行一个数表示答案。

样例输入输出

  • 样例输入 1
+?+-
  • 样例输出 1
1
  • 样例输入 2
??+-?-+
  • 样例输出 2
12
  • 样例输入 3
-????-?+?--????
  • 样例输出 3
3675

该题还附加了 8 个额外样例,分别对应每个子任务的限制情况。

数据范围

对于 100% 的数据,$1\le n\le 2\times 10^6$。

子任务编号 分值 $n\le$ 特殊性质
1 10 $10$
2 10 $2\times 10^6$ $s$ 中没有 ?
3 10 $5\times 10^3$ $s$ 中 ? 不超过 15 个
4 10 $40$
5 10 $300$
6 20 $5\times 10^3$
7 10 $2\times 10^5$
8 20 $2\times 10^6$

样例解释

在样例一中,如果初始局面是 +++-,最终将会收集到三个量子 (A) 小球,不会造成贡献;如果初始局面是 +-+-,则会收集到一个量子 (A) 和一个虚数 (B) 小球,造成 1 点贡献。所以总的答案是 1。