CF1609B.William the Vigilant

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

William the Vigilant

题目描述

在成为一名成功的交易员之前,William 获得了大学学位。在他的求学过程中,发生了一件有趣的事情,从那以后,William 开始更加认真地听作业要求。以下是作业的正式描述:

给定一个长度为 nn 的字符串 ss,仅由字符 "a"、"b" 和 "c" 组成。有 qq 个操作,每个操作为 (pos,c)(pos, c),表示将字符串 ss 的第 pospos 个字符替换为字符 cc。每次操作后,你需要输出最少需要替换多少个字符,才能使字符串中不再包含子串 "abc"。一次合法的替换可以将某个字符替换为 "a"、"b" 或 "c"。

如果字符串 xx 可以通过从字符串 yy 的开头删除若干(可能为零或全部)字符,并从结尾删除若干(可能为零或全部)字符得到,则称 xxyy 的子串。

输入格式

第一行包含两个整数 nnqq,分别表示字符串的长度和操作次数,满足 1n,q1051 \le n, q \le 10^5

第二行包含字符串 ss,仅由字符 "a"、"b" 和 "c" 组成。

接下来的 qq 行,每行包含一个整数 ii 和一个字符 cc,表示将第 ii 个字符替换为字符 cc,其中 1in1 \le i \le ncc 只能是 "a"、"b" 或 "c"。

输出格式

对于每个操作,输出一个整数,表示最少需要替换多少个字符,才能使字符串中不再包含子串 "abc"。

说明/提示

我们来考虑每次操作后的字符串状态:

  1. s=s = "abcabcabc"。此时可以进行 33 次替换,例如变为 s=s = "bbcaccabb"。该字符串不包含 "abc" 作为子串。
  2. s=s = "bbcabcabc"。此时可以进行 22 次替换,例如变为 s=s = "bbcbbcbbc"。该字符串不包含 "abc" 作为子串。
  3. s=s = "bccabcabc"。此时可以进行 22 次替换,例如变为 s=s = "bccbbcbbc"。该字符串不包含 "abc" 作为子串。
  4. s=s = "bcaabcabc"。此时可以进行 22 次替换,例如变为 s=s = "bcabbcbbc"。该字符串不包含 "abc" 作为子串。
  5. s=s = "bcabbcabc"。此时可以进行 11 次替换,例如变为 s=s = "bcabbcabb"。该字符串不包含 "abc" 作为子串。
  6. s=s = "bcabccabc"。此时可以进行 22 次替换,例如变为 s=s = "bcabbcabb"。该字符串不包含 "abc" 作为子串。
  7. s=s = "bcabccaac"。此时可以进行 11 次替换,例如变为 s=s = "bcabbcaac"。该字符串不包含 "abc" 作为子串。
  8. s=s = "bcabccaab"。此时可以进行 11 次替换,例如变为 s=s = "bcabbcaab"。该字符串不包含 "abc" 作为子串。
  9. s=s = "ccabccaab"。此时可以进行 11 次替换,例如变为 s=s = "ccabbcaab"。该字符串不包含 "abc" 作为子串。
  10. s=s = "ccaaccaab"。此时字符串中不包含 "abc" 作为子串,无需替换。

由 ChatGPT 4.1 翻译

样例

9 10
abcabcabc
1 a
1 b
2 c
3 a
4 b
5 c
8 a
9 b
1 c
4 a
3
2
2
2
1
2
1
1
1
0

在线编程 IDE

建议全屏模式获得最佳体验