1 条题解

  • 0
    @ 2025-4-9 19:38:47

    这道题主要属于字符串处理与重排类型的题目 代码思路详细分析

    1. 头文件与命名空间
    #include <iostream>
    #include <string>
    using namespace std;
    

    引入 头文件,目的是实现输入输出操作。 引入 头文件,用于处理字符串。 运用 using namespace std; 避免每次使用标准库中的类和函数时都要写 std::。 2. 主函数开始

    int main() {
        string s, t;
        while (cin >> s >> t) {
    

    定义两个 string 类型的变量 s 和 t,用于存储输入的字符串。 借助 while (cin >> s >> t) 循环持续读取输入的字符串 s 和 t,直至输入结束。 3. 记录字符串 s 中字符的索引

            int charIndex[26] = {0}; 
            for (size_t i = 0; i < s.length(); ++i) {
                charIndex[s[i] - 'A'] = i;
            }
    

    定义一个长度为 26 的整型数组 charIndex,用于记录字符串 s 中每个大写字母的索引。 遍历字符串 s,把每个字符减去 'A' 得到的偏移量作为 charIndex 数组的索引,将该字符在 s 中的实际索引存储到 charIndex 数组对应的位置。 4. 第一次重排操作:生成中间结果

            string intermediateResult = "";
            for (size_t i = 0; i < s.length(); ++i) {
                int indexInS = charIndex[i];
                size_t partLength = t.length() / s.length();
                for (size_t j = 0; j < partLength; ++j) {
                    intermediateResult += t[partLength * indexInS + j];
                }
            }
    

    定义一个空字符串 intermediateResult,用于存储第一次重排后的中间结果。 遍历字符串 s 的长度,通过 charIndex 数组获取每个字符在 s 中的索引 indexInS。 计算出 t 中每个部分的长度 partLength,假设 t 的长度是 s 长度的整数倍。 依据 indexInS 和 partLength,从 t 中取出相应部分添加到 intermediateResult 中。 5. 第二次重排操作:生成最终结果

            string finalResult = "";
            size_t partLength = t.length() / s.length();
            for (size_t i = 0; i < partLength; ++i) {
                for (size_t j = 0; j < s.length(); ++j) {
                    finalResult += intermediateResult[i + partLength * j];
                }
            }
    

    定义一个空字符串 finalResult,用于存储最终的重排结果。 再次计算 t 中每个部分的长度 partLength。 通过两层循环对 intermediateResult 进行再次重排,将重排后的字符添加到 finalResult 中。 6. 输出最终结果

            cout << finalResult << endl;
        }
        return 0;
    }
    

    输出最终的重排结果 finalResult。 循环继续等待下一组输入,直至输入结束。 主函数返回 0 表示程序正常结束。

    全部代码

    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <string>
    #include <algorithm>
    #include <map>
    #include <set>
    #include <ctime>
    using namespace std;
    #define ll long long
    #define MOD 1000000007
    #define TASK "proddiff"
    #define nmax 1002
    #define pi  acos(-1.0)
     
    string s,t;
    int num[2000];
    int main()
    {
       // freopen("input.txt", "r", stdin);
      //  freopen("output.txt", "w", stdout);
     
        while (cin>>s>>t)
        {
            string ans = "";
            for (int i=0; i<2000; i++)
                num[i] = 0;
            int k = 0;
           for (int i=0; i<30; i++)
            for (int j=0; j<s.length(); j++)
                if (i==s[j]-'A')
                {
                    num[k] = j;
                    k++;
                }
                k = 0;
                while (k<s.length())
                {
                    for (int i=0; i<s.length(); i++)
                        if (num[i]==k)
                        {
                            for (int j=0; j<t.length()/s.length(); j++)
                                ans+=t[t.length()/s.length()*i+j];
                            k++;
                        }
                }
     
                string res = "";
                for (int i=0; i<t.length()/s.length(); i++)
                {
                    for (int j=0; j<s.length(); j++)
                        res += ans[i+t.length()/s.length()*j];
                }
                cout<<res<<endl;
        }
    }
    
    • 1

    信息

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