[ABC342C] Many Replacement

[ABC342C] Many Replacement

题面翻译

给你一个长度为 N N N 的字符串 S S S Q Q Q 次操作,每次操作用一対小写字母 ( c , d ) (c,d) (c,d) 表示,表示将目前 S S S 中所有的 c c c 替换成 d d d,输出经这 Q Q Q 次操作后的 S S S

1 ≤ N , Q ≤ 2 × 1 0 5 1\le N,Q\le 2\times 10^5 1N,Q2×105,保证 S S S 中的所有字符均为小写字母。

题目描述

英小文字からなる長さ $ N $ の文字列 $ S $ が与えられます。
文字列 $ S $ に対して操作を $ Q $ 回行います。 $ i $ 回目 $ (1\leq\ i\leq\ Q) $ の操作は文字の組 $ (c\ _\ i,d\ _\ i) $ で表され、次のような操作に対応します。

  • $ S $ に含まれる文字 $ c\ _\ i $ をすべて文字 $ d\ _\ i $ で置き換える。
    すべての操作が終わったあとの文字列 $ S $ を出力してください。

输入格式

入力は以下の形式で標準入力から与えられる。

$ N $ $ S $ $ Q $ $ c\ _\ 1 $ $ d\ _\ 1 $ $ c\ _\ 2 $ $ d\ _\ 2 $ $ \vdots $ $ c\ _\ Q $ $ d\ _\ Q $

输出格式

すべての操作が終わったあとの $ S $ を出力せよ。

样例 #1

样例输入 #1

7
atcoder
4
r a
t e
d v
a r

样例输出 #1

recover

样例 #2

样例输入 #2

3
abc
4
a a
s k
n n
z b

样例输出 #2

abc

样例 #3

样例输入 #3

34
supercalifragilisticexpialidocious
20
g c
l g
g m
c m
r o
s e
a a
o f
f s
e t
t l
d v
p k
v h
x i
h n
n j
i r
s i
u a

样例输出 #3

laklimamriiamrmrllrmlrkramrjimrial

提示

制約

  • $ 1\leq\ N\leq2\times10^5 $
  • $ S $ は英小文字からなる長さ $ N $ の文字列
  • $ 1\leq\ Q\leq2\times10^5 $
  • $ c\ _\ i,d\ _\ i $ は英小文字 $ (1\leq\ i\leq\ Q) $
  • $ N,Q $ は整数

Sample Explanation 1

$ S $ は atcoderatcodeaaecodeaaecovearecover と変化します。 たとえば、$ 4 $ 番目の操作では $ S={} ‘ a e c o v e a ‘ に含まれる ‘ a ‘ ( `aecovea` に含まれる `a` ( aecoveaに含まれるa 1 $ 文字目と $ 7 $ 文字目)をすべて r に置き換えるので $ S={} $recover となります。 すべての操作が終わったときには $ S={} $recover となっているため、recover を出力してください。

Sample Explanation 2

$ c\ _\ i=d\ _\ i $ であるような操作や $ S $ に $ c\ _\ i $ が含まれないような操作もあります。

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;
int  c[26];
string s;
int main(){
    for(int i=0;i<26;i++) c[i]=i;//初始化
    cin >> n >> s;
    cin >> m;
    while (m--)
    {
        char a, b;//a-->b
        cin >> a >> b;
        int ta = a - 'a';//这个要改的字母的位置
        int tb = b - 'a';//要改成的字母的位置
        for (int i = 0; i < 26; i++)
        {
            if (c[i] == ta)//找到这个位置
                c[i] = tb;//把这个位置原本对应的字母改成别的
        }
    }

    for (int i = 0; i < n; i++){
        cout <<(char) (c[s[i]-'a'] + 'a');
    }
    return 0;
}
  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值