CF1774C. Ice and Fire
题目大意

分析
- 首先当 s的最后一位为0时,那么此时 能力值=1的人一定有获胜机会的。
- 同理当s的最后一位为1时,那么此时能力值=max的值是一定有获胜机会的
- 当s的后缀为00时,与上一次的状态相比,多了一个0,多了一个最大值。新增的0和新增的最大值 会进行消除,所以结果与上一次不变。
- 当s的后缀为11时,同理可得没有改变。
- 当s得后缀为01时,除了最小值以外,其他的都有机会获胜。
- 后缀位10时同理
code
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
string s;
cin >> s;
int len = s.length();
int sum = 1;
int cnt = 2;
cout << sum << ' ';
for (int i = 1; i < len; i++)
{
cnt++;
if (s[i] == s[i - 1])
{
cout << sum << ' ';
}
else
{
sum = cnt - 1;
cout << sum << ' ';
}
}
cout << '\n';
}
return 0;
}