CF2070E Game with Binary String

题目描述

考虑以下游戏。两个玩家拥有一个二进制字符串(一个由字符 0 和/或 1 组成的字符串)。玩家轮流行动,由第一位玩家先手。在玩家的回合中,必须选择字符串中恰好两个相邻元素并移除它们(首元素和末元素也被视为相邻)。此外,根据当前行动玩家的不同存在额外约束: - 如果是第一位玩家的回合,所选的两个字符必须都是 0; - 如果是第二位玩家的回合,所选的两个字符中至少有一个必须是 1。 无法进行有效移动的玩家输掉游戏。这也意味着如果当前字符串长度小于 2,当前玩家输掉游戏。 给定一个长度为 $n$ 的二进制字符串 $s$。你需要计算其满足以下条件的子串数量:若在该子串上进行游戏且双方都采取最优决策,第一位玩家将获胜。换句话说,计算满足 $1 \le l \le r \le n$ 的有序对 $(l, r)$ 的数量,使得在字符串 $s_l s_{l+1} \dots s_r$ 上第一位玩家拥有必胜策略。

输入格式

第一行包含一个整数 $n$($1 \le n \le 3 \cdot 10^5$)。 第二行包含字符串 $s$,由恰好 $n$ 个字符组成。每个字符为 0 或 1。

输出格式

输出一个整数——满足条件的子串数量(即第一位玩家能获胜的子串数量)。

说明/提示

第一个示例中,以下子串是第一位玩家的必胜子串($s[l:r]$ 表示 $s_l s_{l+1} \dots s_r$): - $s[1:2]$; - $s[1:3]$; - $s[1:7]$; - $s[2:4]$; - $s[2:8]$; - $s[3:5]$; - $s[4:5]$; - $s[4:6]$; - $s[5:7]$; - $s[6:8]$; - $s[7:8]$; - $s[7:9]$。 翻译由 DeepSeek R1 完成