CF2111E.Changing the String

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个只包含拉丁字母前 33 个字母的字符串 ss,即字符串中的每个字符都是 aa、bb 或 cc。

同时给定 qq 个操作。每个操作会给出两个字母 xx 和 yy(均为 aa、bb 或 cc),对于每个操作,必须执行以下两种操作之一:

  • 将字符串 ss 中任意(一个)出现的字母 xx 改为字母 yy(如果 xx 至少出现一次);
  • 什么都不做。

目标是按照给定顺序执行所有操作,使得字符串 ss 最终字典序最小。

回忆:如果字符串 aa 是字符串 bb 的前缀且 a≠ba \neq b,或者在第一个不同的位置,aa 的字母比 bb 的对应字母在字母表中更靠前,则称字符串 aa 的字典序小于字符串 bb。

输入格式

每个测试点包含若干组测试数据。第一行包含一个整数 tt(1≤t≤1031 \le t \le 10^{3}),表示测试数据组数。接下来是每组测试数据的描述。

每组测试数据的第一行包含两个整数 nn 和 qq(1≤n,q≤2×1051 \le n, q \le 2 \times 10^{5}),分别表示字符串 ss 的长度和操作数。

每组测试数据的第二行给出字符串 ss,长度恰为 nn,且每个字符均为 aa、bb 或 cc。

接下来的 qq 行,每行包含两个字符 xx 和 yy,均为 aa、bb 或 cc,表示一次操作。

额外输入限制:

  • 所有测试数据中 nn 的总和不超过 2×1052 \times 10^{5};
  • 所有测试数据中 qq 的总和不超过 2×1052 \times 10^{5}。

输出格式

对于每组测试数据,输出通过给定操作可以得到的字典序最小的字符串。

输入输出样例

  • 输入#1

    3
    2 2
    cb
    c b
    b a
    10 10
    bbbbbbbbbb
    b a
    b c
    c b
    b a
    c a
    b c
    b c
    b a
    a b
    c a
    30 20
    abcaababcbbcabcbbcabcbabbbbabc
    b c
    b c
    c a
    b c
    b c
    b a
    b c
    b c
    b a
    b a
    b a
    b a
    c a
    b c
    c a
    b c
    c a
    c a
    b c
    c b

    输出#1

    ab
    aaaaabbbbb
    aaaaaaaaaaaaaaabbbabcbabbbbabc

说明/提示

在第一个测试用例中,两个操作都需要应用在第一个字母上:

  1. 第一个操作后,$s = $ "bb"
  2. 第二个操作后,$s = $ "ab"

在第二个测试用例中,字符串的变化过程如下:

  1. "bbbbabbbbb"(第 55 个字母被修改)
  2. "cbbbabbbbb"(第 11 个字母被修改)
  3. "cbbbabbbbb"(未做任何操作)
  4. "cbbaabbbbb"(第 44 个字母被修改)
  5. "abbaabbbbb"(第 11 个字母被修改)
  6. "abcaabbbbb"(第 33 个字母被修改)
  7. "abcaabbbbb"(未做任何操作)
  8. "aacaabbbbb"(第 22 个字母被修改)
  9. "aacaabbbbb"(未做任何操作)
  10. "aaaaabbbbb"(第 33 个字母被修改)

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页