QOJ.ac

QOJ

Límite de tiempo: 1 s Límite de memoria: 2048 MB Puntuación total: 100 Dificultad: [mostrar]

#8772. 房屋拆解

Estadísticas

在 Circleland 的土地上,有一个圆周,圆周上均匀分布着若干个点。任意两个相邻点之间的距离为 1。

圆周上的点分布着人、空房子或什么都没有。每个人都想走到一间不同的房子里。每间房子最多只能容纳一个人。人只能沿着圆周行走;他们不能穿过圆心。

目前,房子的数量多于人的数量,因此你需要拆除一些房子,使得剩余房子的数量等于人的数量。假设你拆除了一组房子 $S$。令 $f(S)$ 为使每个人都走到一间不同的未拆除房子所需的最少总步行距离。

计算 $f(S)$ 的最小值,并计算有多少组房子 $S$ 能达到这个最小值。由于 $S$ 的数量可能很大,请输出其对 $998\,244\,353$ 取模的结果。

输入格式

第一行包含三个整数 $x, n$ 和 $m$ ($1 \le n < m \le 2 \cdot 10^5, n + m \le x \le 10^9$),其中 $x$ 是圆周上的点数,$n$ 是人数,$m$ 是房子数。点被标记为 $1$ 到 $x$,且点 $x$ 与点 $1$ 相邻。

接下来的 $n + m$ 行,每行包含两个标记,一个整数 $p$ ($1 \le p \le x$) 和一个字符 $t$ ($t \in \{\text{P}, \text{H}\}$),其中 $p$ 表示人或房子的位置,$t$ 表示点的类型,P 代表人,H 代表房子。所有位置各不相同,且给出的位置按升序排列。

输出格式

输出两行。

第一行输出 $f(S)$ 的最小值。

第二行输出达到该最小值的房子集合 $S$ 的数量,对 $998\,244\,353$ 取模。

样例

样例输入 1

6 2 4
1 P
2 H
3 P
4 H
5 H
6 H

样例输出 1

2
3

样例输入 2

1000000000 2 4
1 P
6 H
31415926 H
999999998 H
999999999 H
1000000000 P

样例输出 2

4
1

说明

对于第一个样例,最小总步行距离为 2。我们可以拆除位于 $\{2, 5\}$、$\{4, 5\}$ 或 $\{5, 6\}$ 的房子。

对于第二个样例,我们可以拆除位于 $\{6, 31415926\}$ 的房子,得到最小总步行距离 4。注意,即使最小步行距离可以通过多种方式实现,由于拆除的房子集合相同,它也只被计数一次。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.