1 条题解

  • 0
    @ 2025-4-9 20:37:01

    问题分析

    本题要求处理包含交错韵(Schuttelreim)的诗歌输入。对于每组输入的两行诗,第一行包含用 < 和 > 标记的子字符串,第二行以 ... 结尾。需要将第一行的括号标记去掉得到新的第一行输出,同时将第二行的 ... 替换为第一行中括号内子字符串按特定顺序组合的结果。

    解题思路

    读取输入:首先读取输入的组数 n,然后循环 n 次,每次读取两行诗。 处理第一行诗:遍历第一行诗,去掉 < 和 > 标记,同时提取出括号内的子字符串 s2 和 s4,以及括号外的子字符串 s1、s3 和 s5。 处理第二行诗:将第二行诗中的 ... 替换为s4+s3+s2+s5 s4 + s3 + s2 + s5 的结果。 输出结果:输出处理后的第一行诗和第二行诗。

    cpp

    #include <iostream>
    #include <string>
    
    void processSchuttelreim(const 
    std::string& line1, const std::string& 
    line2) {
    std::string s1, s2, s3, s4, s5;
    bool inBracket = false;
    int bracketCount = 0;
    
    for (char c : line1) {
        if (c == '<') {
            inBracket = true;
            continue;
        }
        if (c == '>') {
            inBracket = false;
            bracketCount++;
            continue;
        }
    
        if (inBracket) {
            if (bracketCount == 0) {
                s2 += c;
            } else {
                s4 += c;
            }
        } else {
            if (bracketCount == 0) {
                s1 += c;
            } else if (bracketCount == 1) {
                s3 += c;
            } else {
                s5 += c;
            }
        }
    }
    
      std::cout << s1 << s2 << s3 << s4 << 
      s5 << std::endl;
      std::string result = line2;
      size_t pos = result.find("...");
      if (pos != std::string::npos) {
        result.replace(pos, 3, s4 + s3 + 
      s2 + s5);
      }
      std::cout << result << std::endl;
    

    }

    int main() {
    int n;
    std::cin >> n;
    std::cin.ignore();
    
    for (int i = 0; i < n; ++i) {
        std::string line1, line2;
        std::getline(std::cin, line1);
        std::getline(std::cin, line2);
        processSchuttelreim(line1, line2);
    }
    
    return 0;
    

    }

    • 1

    信息

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