先把原串按连续相同字符压缩成若干段,设段长依次为:
a1,a2,…,ak
由于相邻两段阵营一定不同,所以这些段的阵营是交替出现的。
根据题意,每一轮中每个选手只会攻击自己右侧第一个不同阵营的选手,并且所有被攻击的选手会同时被淘汰。
在一场竞技中,有 n 名选手排成一列,从左到右依次编号为 1,2,…,n。每名选手属于红方(用字符 0 表示)或蓝方(用字符 1 表示)。游戏按轮进行:每一轮,所有在场选手同时向自己右侧(编号更大的方向)寻找第一个与自己阵营不同的选手,并对其发动攻击。被攻击的选手将在本轮结束后淘汰离场;若某选手右侧不存在不同阵营的选手,则该选手本轮不行动。同一选手可能在同一轮中被多名选手攻击。一轮中所有攻击同时结算,攻击结束后,所有被攻击的选手立即离场,剩余选手保持原有相对顺序,进入下一轮。当某一轮没有任何攻击发生时,游戏结束。求整个游戏过程中共有多少名选手被淘汰。
选手数量 n 满足 1≤n≤105,给定的阵营序列是一个长度为 n 的字符串,仅由字符 0 和 1 组成。
第一行包含一个整数 n,表示选手数量。
第二行包含一个长度为 n 的字符串 s,s 仅由字符 0 和 1 组成,其中 si 表示从左向右第 i 名选手的阵营(0 代表红方,1 代表蓝方)。
输出一个整数,表示总共被淘汰的选手人数。
输入
1
0
输出
0
说明
只有 1 名选手,右侧没有其他选手,因此无法发起任何攻击。游戏直接结束,没有任何选手被淘汰。总共淘汰 0 人。
输入
4
0101
输出
3
说明
选手阵营依次为 0(红)、1(蓝)、0(红)、1(蓝)。
第一轮:
0)攻击右侧第一个不同阵营的选手 2(1);1)攻击右侧第一个不同阵营的选手 3(0);0)攻击右侧第一个不同阵营的选手 4(1);0)。第二轮:只剩一名选手,无攻击发生,游戏结束。
累计淘汰 3 人。
输入
6
000111
输出
3
说明
阵营序列为三个 0 接三个 1。
第一轮:每个 0 右侧第一个不同阵营均为第一个 1(第 4 名选手),三名 0 同时攻击第 4 名选手;1 阵营选手右侧全为 1,无不同阵营,不行动。第 4 名选手被淘汰,剩余 0 0 0 1 1(原第 1,2,3,5,6 名)。
第二轮:三个 0 均攻击第一个 1(原第 5 名),该名 1 被淘汰,剩余 0 0 0 1(原第 6 名)。
第三轮:三个 0 攻击最后一个 1,该名 1 被淘汰,剩余三名 0,无攻击发生,游戏结束。
总共淘汰了 3 名选手(全部 1 阵营选手)。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册