按下第 i 段会翻转后缀 i∼m,且不能回头。走到 i 时,左边已经决定完,若当前实际状态还是 0,就只能在这里按,否则这盏灯再也无法改成 1。
0,必须操作一次,并把 flip 取反。展廊里沿墙装了一条灯带,分成 m 段,从左到右编号为 1 到 m。每段有两种状态:亮记为 1,灭记为 0。值班员从最左侧开始只向右走,走到第 i 段时可以按一次该段的总控。按下后,第 i 段到第 m 段的状态全部翻转:1 变成 0,0 变成 1。走过某段后不能再回头。
要求走完全部灯段后,每一段都是 1。求最少按几次总控。
形式化地:给定长度为 m 的 0/1 序列 b1,b2,…,bm。一次操作选定下标 i,把 bi,bi+1,…,bm 全部取反。操作必须按下标从小到大决定,且每个下标最多操作一次。求使序列变为全 1 的最少操作次数。
第一行一个整数 m(1≤m≤105),表示灯段数。
第二行 m 个整数 b1,b2,…,bm,每个数只能是 0 或 1,表示各段初始状态。
输出一个非负整数,表示最少操作次数。
输入
1
1
输出
0
说明
只有一段且已经是 1,不必按总控。
输入
3
0 1 0
输出
3
说明
1 段是 0,必须按,序列变为 1 0 1。2 段此时是 0,必须按,序列变为 1 1 0。3 段此时是 0,再按一次,变为 1 1 1。共 3 次。
输入
4
0 0 1 1
输出
2
说明
先按第 1 段,得到 1 1 0 0;走到第 3 段时再按一次,得到 1 1 1 1。共 2 次。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册