#P12667. [KOI 2023 Round 2] 傻瓜锁

[KOI 2023 Round 2] 傻瓜锁

题目背景

试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。

按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。

题目描述

KOI 国即将举办一场“快速解锁比赛”。你作为参赛者,正在练习解锁的能力。本次比赛所用的锁因为特性特殊,被称为傻瓜锁

傻瓜锁可以用一个由小写英文字母组成的字符串 SS 表示。你可以在一次操作中选定 SS 中的某个字符,将其修改为字母表顺序中相邻的字母。例如,当傻瓜锁的当前状态为 "ioiaa" 时,你可以进行以下 8 种操作:

  • 将第 1 个字符 'i' 改为 'h'
  • 将第 1 个字符 'i' 改为 'j'
  • 将第 2 个字符 'o' 改为 'n'
  • 将第 2 个字符 'o' 改为 'p'
  • 将第 3 个字符 'i' 改为 'h'
  • 将第 3 个字符 'i' 改为 'j'
  • 将第 4 个字符 'a' 改为 'b'
  • 将第 5 个字符 'a' 改为 'b'

傻瓜锁具有如下特性:当字符串中字符按照字母表升序排列时,锁就被解开了。也就是说,对于任意的 ii1i<S1 \leq i < |S|),必须有 SiSi+1S_i \leq S_{i+1}

例如,"aabbcc""eel""a""zzzzz" 都是升序排列的;而 "lee""ccbbaa""koi" 则不是升序排列的。

定义一个傻瓜锁当前状态为字符串 SS 时,将其解锁所需的最小操作次数,称为该字符串 SS难度。你已经在练习如何快速计算 SS 的难度。

现在,你打算通过更难的练习方式来提升自己。

初始时,给定傻瓜锁的状态为字符串 SS,长度为 NN。接下来,你将接收到 QQ更新操作(query),每次操作修改 SS 中的某一位字符。每次操作由一个整数 ii1iN1 \leq i \leq N)和一个小写字母 cc 组成,表示将 SS 中第 ii 个字符改为 cc。这些更新操作需要按顺序依次应用

你的任务是:首先输出初始字符串 SS 的难度,之后每处理完一个更新操作,输出更新后字符串 SS 的难度。

输入格式

第一行输入字符串 SS
第二行输入整数 QQ,表示操作数量。
Q>0Q > 0,接下来 QQ 行,每行输入两个值 i ci\ c,表示将 SS 的第 ii 个字符改为字符 cc,两者用空格分隔。

输出格式

总共需输出 Q+1Q + 1 个整数,依次为:

  • 第 1 行输出初始字符串 SS 的难度;
  • Q>0Q > 0,接下来的 QQ 行,依次输出每次更新操作后当前字符串 SS 的难度。
ababba
5
1 b
3 b
2 a
2 b
5 a
2
2
1
2
1
2
acabed
5
1 c
2 a
3 d
4 c
5 a
3
4
3
5
4
5
acaykp
6
1 c
2 a
5 a
6 k
3 p
4 c
16
16
16
26
26
31
17
zaire
1
5 r
38
25

提示

限制条件

  • SS 由小写英文字母组成。
  • SS 的长度 NN 满足 1N1000001 \leq N \leq 100\,000
  • 0Q1000000 \leq Q \leq 100\,000
  • 1iN1 \leq i \leq N
  • cc 为小写英文字母,且保证 cc 不等于更新前 SS 的第 ii 个字符。
  • “小写英文字母”指的是 "abcdefghijklmnopqrstuvwxyz"

子任务

  1. (7 分)Q=0Q = 0N5000N \leq 5\,000,且 SS 仅由 'a''b' 组成。
  2. (6 分)Q10Q \leq 10SS 仅由 'a''b' 组成,更新后依然保持只含 'a''b'
  3. (5 分)Q10Q \leq 10SS 仅由 'a''b''c' 组成,更新后依然保持只含这三种字符。
  4. (4 分)Q10Q \leq 10SS 仅由 'a''b''c''d''e' 组成,更新后依然保持如此。
  5. (3 分)Q10Q \leq 10
  6. (12 分)SS 仅由 'a''b' 组成,更新后依然保持如此。
  7. (10 分)SS 仅由 'a''b''c' 组成,更新后依然保持如此。
  8. (8 分)SS 仅由 'a''b''c''d''e' 组成,更新后依然保持如此。
  9. (45 分)无附加限制。

翻译由 ChatGPT-4o 完成