CF1398F Controversial Rounds

题目描述

Alice 和 Bob 在玩游戏。整个游戏过程包含若干组游戏。每一组游戏会进行若干轮。在每一轮游戏中,要么 Alice 赢要么 Bob 赢。一组游戏结束,当且仅当 Alice 和 Bob 中的 $1$ 个人在这一组游戏中赢了连续的 $x$ 轮。 你现在知道,Alice 和 Bob 一共进行了 $n$ 轮游戏,并且知道其中若干轮游戏的结果。 对于每一个 $x$($x$ 的定义在上文,且 $1\le x\le n$),要求你计算出 Alice 和 Bob 能进行的游戏组数的最大值。如果在一种方案中,最后一组游戏并不能刚好结束,那么这组游戏不计入该方案。

输入格式

第一行包括一个整数 $n$($1\le n\le 10^6$),表示 Alice 和 Bob 进行的游戏轮数。 第二行包括一个长度为 $n$ 的字符串 $s$,如果 $s$ 的第 $i$ 位为 $\texttt 0$,那么 Alice 就赢了第 $i$ 轮游戏,如果为 $\texttt 1$,那么就是 Bob 赢,如果为 $\texttt ?$,就表示你并不知道第 $i$ 轮游戏的胜负情况。

输出格式

一行,包括 $n$ 个整数,第 $i$ 个整数表示当 $x=i$ 时的答案。

说明/提示

对于第一个测试案例: - 如果 $x = 1$ 和 $s = \texttt{110000}$ 或 $s = \texttt{111000}$,则有六组游戏完成; - 如果 $x = 2$ 和 $s = \texttt{110000}$,则有三组游戏完成; - 如果 $x = 3$ 和 $s = \texttt{111000}$,那么有两组游戏完成; - 如果 $x = 4$ 和 $s = \texttt{110000}$,那么有一组游戏完成; - 如果 $x = 5$,则没有一组游戏完成; - 如果 $x = 6$,则没有一组游戏完成。