U598187 代理指挥正常运行

题目背景

在热门游戏《明日方舟》中,玩家成功挑战某一关卡后,即可启用“代理指挥”功能。该功能能够精确复现玩家的通关操作,实现自动化游戏,从而极大地减轻了玩家的重复操作负担。

题目描述

代理指挥系统中的所有操作可以抽象为一个长度为 $n$ 的指令序列 $A = (A_1, A_2, \dots, A_n)$,其中 $A_i \in \{1, 2, 3\}$。系统将**按顺序**处理指令 $A_1, A_2, \dots, A_n$。 三种指令的具体效果与执行条件如下: 1. **指令 1 (部署)**:当战场上**没有**干员时,可执行此指令。执行后,一名新干员将被部署到战场上。 2. **指令 2 (技能)**:当战场上**存在**一名干员,**且**该干员在本次部署后**尚未使用过**技能时,可执行此指令。执行后,该干员将释放其技能。 3. **指令 3 (撤退)**:当战场上**存在**一名干员时,可执行此指令。执行后,该干员将离开战场。 对于每个指令 $A_i$,系统会检查其执行条件。若条件不满足,该指令将被**跳过**,不产生任何效果。 特别地,当且仅当一个**指令 2 (技能)** 因不满足执行条件而被跳过时,会产生一次**风险**。如果在处理完整个序列 $A$ 后,累计产生的风险总数达到或超过了给定的阈值 $K$,我们称本次代理指挥**失败**。 一位自称普瑞塞斯的神秘女士为你提供了一种改变指令序列的能力。你可以选择序列 $A$ 中的任意一个指令 $A_i$,并将其变为 $A_i' = (A_i \mod 3) + 1$。不难发现,这个变换是一个循环:$1 \to 2 \to 3 \to 1$。每个位置的指令最多只能被改变**一次**。 你的任务是,计算为了使代理指挥最终失败(即风险数 $\ge K$),最少需要对序列 $A$ 进行多少次改变。

输入格式

第一行包含两个正整数 $n$ 和 $K$,分别表示指令序列的长度和代理指挥失败所需的最小风险数。 第二行包含 $n$ 个由空格分隔的正整数,表示初始指令序列 $A$。

输出格式

输出一个整数,表示使代理作战失败所需的最小改变次数,如果无论如何都无法使代理作战失败,输出 $-1$。

说明/提示

数据范围: $ 1 \leq n,K \leq 5 \times 10^6 $ $ 1 \leq A_i \leq 3 $ **友情提示:本题输入数据量较大,若使用C++语言可用以下代码提高cin的读入效率(使用后cin不可与scanf, getchar混用):** ```cpp std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr);