1 条题解

  • 0
    @ 2026-4-25 15:39:28

    题解

    商店的玻璃窗上画有一个字符串,Ship 从外面正对玻璃窗看到的是字符串 aa,从里面看向同一玻璃窗看到的是字符串 bb。由于是从背面观看,字符串发生了左右翻转,同时字符本身也因镜像而改变:'p' 的镜像看起来像 'q','q' 的镜像像 'p',而 'w' 是上下左右对称的,镜像仍为 'w'。

    具体变换规则如下:

    • 字符串的顺序完全颠倒:原最左字符变成最右,依次类推。
    • 每个字符按照镜像规则替换:'p' \to 'q','q' \to 'p','w' \to 'w'。

    由此,我们可以得到从 aa 构造 bb 的算法:

    1. 将字符串 aa 反转。
    2. 遍历反转后的每个字符,若为 'q' 则改为 'p',若为 'p' 则改为 'q','w' 不变。

    因为题目保证输入字符串仅由 'p'、'q'、'w' 组成,所以无需考虑其他情况。

    算法复杂度: 每组测试数据需要 O(a)O(|a|) 的时间进行反转和替换,总时间为 O(a)O(\sum |a|)。由于 t100t \le 100a100|a| \le 100,完全可以在时限内完成。

    C++ 参考代码(依据标程):

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pll pair<ll, ll>
    
    int t;
    
    int main() {
        cin.tie(0)->sync_with_stdio(0);
        cin >> t;
        while (t--) {
            string s;
            cin >> s;
            reverse(s.begin(), s.end());
            for (char &c : s) if (c == 'q') c = 'p'; else if (c == 'p') c = 'q';
            cout << s << '\n';
        }
    }
    
    • 1

    信息

    ID
    6419
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    1
    已通过
    1
    上传者