把s按相同字符分段,得到段长序列a1,a2,…,ak。
关键等价:每一轮只在相邻段边界处生效,右侧段首被删1个;当中间段清空后,相邻同字符段会合并,后续每轮“只剩下的边界”继续各删1。
正确的聚合方式是“偶数段前缀余额”:
维护余额B表示“到当前为止,仍需被清掉的偶数段总量”(还未被后面的奇数段抵消)。
从左到右处理分段:
现在有n条Plog 在首页上排成一列,队尾在下侧,队头在上侧。用长度为n的 01 串s=s1s2...sn表示这条队列,其中:
一共会进行无限轮互评操作,每一轮:
所有Plog的拥有者同时向队头(右侧)互评;
互评只会影响每条Plog右侧的第一个异属性Plog,如果右侧没有异属性Plog,则不会产生互评操作;
每轮所有互评动作并行计算,然后一次性将所有已经有评论的Plog移出,形成新队列再进入下一轮;同一条 Plog 在一轮可能收获多条评价。
显然,无限进行下去,终究会出现不再有互评发生的情况。求整个过程中共有多少条Plog收获评价。
第一行输入一个整数n(1≤n≤105),表示Plog 数量。
第二行输入一个长度为n且只由字符'0'和'1'构成的字符串s,表示Plog 的属性分布,其中si为从左向右第i条Plog的属性。
输出一个整数,表示所有互评结束后共有多少条Plog收获评价。
输入
5
11101
输出
2
说明
在这个样例中:第一轮,第三条('1')评论第四条('0'),第四条('0')评论第五条('1'),共2条Plog收获评论;剩余前三条Plog拼接为"111",此时剩下的全是美食Plog,不再发生互评现象。
输入
10
1100010101
输出
8
说明
在这个样例中,"1100010101"→"1100"→"110"→"11",共有8条Plog被评论。