1 条题解
-
0
这道题主要属于字符串处理与重排类型的题目 代码思路详细分析
- 头文件与命名空间
#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
- 上传者