#YHCSPJMN120001. 特殊护盾

特殊护盾

特殊护盾

题目背景

在育华学校组织的编程实践活动中,模拟了一个有趣的游戏场景。面条老师在游戏里需要通过一系列房间,每个房间有不同属性的守卫。根据守卫属性,要合理规划特殊护盾的购买数量,确保在通过所有房间的同时,特殊护盾的数量最少。

题目描述

游戏中有 n n 个房间,每个房间前有一个守卫,守卫属性分为:

  • 内鬼守卫(0):修复之前消耗的所有普通和特殊护盾。
  • 普通守卫(1):消耗 1 张普通护盾通过。
  • 特殊守卫(2):消耗 1 张特殊护盾通过(普通护盾无法通过 )。

面条老师初始有无限普通护盾,可提前购买特殊护盾。需计算最少购买多少特殊护盾,才能保证通过所有房间。

输入格式

  1. 第一行:正整数 n n ,表示守卫数量。
  2. 第二行:n n 个整数,依次表示每个守卫的属性(0、1、2 )。

输出格式

输出一个整数,为最少需要购买的特殊护盾数量。

样例

样例输入 1

6  
1 2 0 1 2 2  

样例输出 1

2  

样例解释

购买 2 个特殊护盾:
实际流程:

  1. 守卫 1(普通 ):消耗普通护盾 → 普通护盾剩余无限(不影响 )。
  2. 守卫 2(特殊 ):消耗 1 个特殊护盾 → 剩余 1(初始购买 2 )。
  3. 守卫 3(内鬼 ):修复所有消耗 → 特殊护盾恢复为 2(购买的数量,消耗的 1 被修复 )。
  4. 守卫 4(普通 ):消耗普通护盾。
  5. 守卫 5(特殊 ):消耗 1 个特殊护盾 → 剩余 1。
  6. 守卫 6(特殊 ):消耗 1 个特殊护盾 → 剩余 0。
    总消耗 2 个特殊护盾。

数据规模与测试点

测试点编号 特殊说明 其他
#1~#2 无内鬼守卫(全为 1 或 2 )
#3~#4 无普通守卫(全为 0 或 2 )
#5~#10 所有守卫类型随机出现