AT_abc418_d [ABC418D] XNOR Operation

题目描述

> 本题是 Problem G 的子问题。 一个由 `0` 和 `1` 组成的非空字符串 $S$,当且仅当满足以下条件时,被称为美丽字符串: - (条件)你可以重复执行以下操作,直到 $S$ 的长度变为 $1$,并且最终 $S$ 中唯一剩下的字符为 `1`。 1. 选择任意整数 $i$,满足 $1 \leq i \leq |S| - 1$。 2. 按如下方式定义整数 $x$: - 如果 $S_i = 0$ 且 $S_{i+1} = 0$,则 $x = 1$。 - 如果 $S_i = 0$ 且 $S_{i+1} = 1$,则 $x = 0$。 - 如果 $S_i = 1$ 且 $S_{i+1} = 0$,则 $x = 0$。 - 如果 $S_i = 1$ 且 $S_{i+1} = 1$,则 $x = 1$。 3. 移除 $S_i$ 和 $S_{i+1}$,并在它们的位置插入对应的数字 $x$。 例如,如果 $S = 10101$,选择 $i = 2$,操作后字符串变为 `1001`。 给定一个长度为 $N$ 的只包含 `0` 和 `1` 的字符串 $T$。 请你求出 $T$ 的子串中有多少个是美丽字符串。即使两个子串内容相同,只要它们取自不同的位置,也要分别计数。 什么是子串?一个字符串 $S$ 的**子串**是通过从 $S$ 的开头删除零个或多个字符,并从结尾删除零个或多个字符得到的字符串。 例如,`10` 是 `101` 的子串,但 `11` 不是 `101` 的子串。

输入格式

输入按如下格式从标准输入给出: > $N$ $T$

输出格式

输出 $T$ 的子串中美丽字符串的个数。

说明/提示

### 样例解释 1 通过取 $T$ 的第 1 到第 2 个字符得到的字符串 `11` 是美丽字符串,因为选择 $i = 1$ 并执行操作后,字符串变为 `1`。$T$ 的子串中美丽字符串有以下三个: - 取 $T$ 的第 1 个字符得到的字符串 `1`。 - 取 $T$ 的第 2 个字符得到的字符串 `1`。 - 取 $T$ 的第 1 到第 2 个字符得到的字符串 `11`。 ### 数据范围 - $1 \leq N \leq 2 \times 10^5$ - $N$ 是整数。 - $T$ 是长度为 $N$ 的、仅由 `0` 和 `1` 组成的字符串。 由 ChatGPT 4.1 翻译