编程题
### 问题描述 有一个长为 $n$ 的,只包含字符 `0` 和 `1` 的字符串 $s$,Alice 和 Bob 在这个字符串上玩游戏。Alice 和 Bob 每次游戏会选择字符串 $s$ 的一个连续子串。游戏开始时,Alice 和 Bob 分别有一个分数,初始都为 $0$。游戏中,从左到右对于子串的每一个字符,如果字符为 `0`,Alice 获得一分,如果为 `1`,Bob 获得一分。先取得 $3$ 分的人赢得游戏。当有人赢得游戏时,立刻开始下一局游戏,双方的分数清零。当子串的所有字符都被使用过后,游戏结束。如果在最后时没有人到达 $3$ 分,则认为这一局游戏没有人获胜。 例如,如果 Alice 和 Bob 用 `10110001` 进行游戏,游戏过程如下: 1. 第一个字符为 `1`,Bob分数增加 $1$,此时 Alice 和 Bob 分数分别为 $0$ 和 $1$。 2. 第二个字符为 `0`,Alice分数增加 $1$,此时 Alice 和 Bob 分数分别为 $1$ 和 $1$。 3. 第三个字符为 `1`,Bob分数增加 $1$,此时 Alice 和 Bob 分数分别为 $1$ 和 $2$。 4. 第四个字符为 `1`,Bob分数增加 $1$,此时 Alice 和 Bob 分数分别为 $1$ 和 $3$。Bob获得三分,赢得一局游戏。双方分数清零。 5. 第五个字符为 `0`,Alice分数增加 $1$,此时 Alice 和 Bob 分数分别为 $1$ 和 $0$。 6. 第六个字符为 `0`,Alice分数增加 $1$,此时 Alice 和 Bob 分数分别为 $2$ 和 $0$。 7. 第七个字符为 `0`,Alice分数增加 $1$,此时 Alice 和 Bob 分数分别为 $3$ 和 $0$。Alice获得三分,赢得一局游戏。双方分数清零。 8. 第八个字符为 `1`,Bob分数增加 $1$,此时 Alice 和 Bob 分数分别为 $0$ 和 $1$。字符串所有字符都被使用过,游戏结束。因为没有人取得 $3$ 分,这局游戏没有人获胜。 现在给定 $n$ 和字符串 $s$,接下来进行了 $q$ 次操作。操作有两种类型,按以下格式给出: - `1 p`:翻转字符串的第 $p$ 个字符。如果其为 `1`,将其变为 `0`。如果其为 `0`,将其变为 `1`。 - `2 l r`:Alice 和 Bob 用 $s$ 的从 $l$ 到 $r$ 的子串进行了一次游戏。你需要分别回答在游戏中 Alice 和 Bob 赢得游戏的总次数。 ### 输入格式 输入第一行包含两个正整数 $n,q$,表示字符串的长度和操作的总数。 第二行包含一个长为 $n$ 的,只包含字符 `0` 和 `1` 的字符串 $s$ 表示题目中描述的字符串。 接下来 $q$ 行,每一行表示一次操作。每行的第一个整数为 $op$,表示操作的类型。如果 $op$ 为 $1$,接下来有一个整数 $p$,表示翻转的字符的位置。如果 $op$ 为 $2$,接下来有两个整数 $l,r$,表示 Alice 和 Bob 进行游戏的字符串的左端点和右端点。 ### 输出格式 对于每个 $op$ 为 $2$ 的操作,输出两个整数,分别表示 Alice 和 Bob 赢得游戏的总数。 ### 样例输入 ```text 10 5 1110100000 2 1 10 1 7 2 3 10 1 5 2 4 9 ``` ### 样例输出 ```text 2 1 1 1 1 0 ``` ### 说明 对于第一个操作,Alice 和 Bob 进行游戏的字符串为 `1110100000`。第一局游戏 Bob 获胜,第二局和第三局游戏 Alice 获胜。 对于第二个操作,字符串 $s$ 变为 `1110101000`。 对于第三个操作,Alice 和 Bob 进行游戏的字符串为 `10101000`。第一局游戏 Bob 获胜,第二局游戏 Alice 获胜。 对于第四个操作,字符串 $s$ 变为 `1110001000`。 对于第五个操作,Alice 和 Bob 进行游戏的字符串为 `000100`。第一局游戏 Alice 获胜,第二局游戏因为子串没有未使用的字符而结束。此时 Alice 和 Bob 分数分别为 $2$ 和 $1$,没有人取得 $3$ 分,游戏结束。 ### 评测数据规模 对于 $20$% 的评测数据,$1\leq n,q \leq 10^3$。 对于 $100$% 的评测数据,$1\leq n,q \leq 10^5$,$1\leq op \leq 2$,$1\leq p \leq n$,$1\leq l \leq r \leq n$。保证至少有一次操作为操作 $2$。
查看答案
赣ICP备20007335号-2