尼玛,写的博客又被csdn吞了,早晚有一天我会换博客的,fuck!
不写了,直接贴代码。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
#include <set>
#include <cmath>
using namespace std;
typedef long long LL;
typedef pair<string,string> P;
const int maxn = 1000000 + 5;
const int INF = 1000000000;
char c[30];
char re[30];
char s[maxn];
int len[maxn];
vector<char> V[maxn];
vector<char> ans;
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
cin >> s >> c;
for(int i = 0;i < 26;i++){
re[c[i]-'a'] = i + 'a';
}
for(int i = 0;i < maxn;i++) V[i].clear();
ans.clear();
for(int i = 0;i < n;i++){
char tem = s[i];
for(int j = 1;j <= 26;j++){
tem = re[tem-'a'];
V[i].push_back(tem);
if(tem == s[i]){
len[i] = j;
break;
}
}
}
int a = 0,b = 1;
for(int i = 0;i < n;i++){
char Min = 'z';
int k = 0;
int vis = a%len[i];
int missyou;
for(int j = 0;j < len[i]+1;j++){
int pos = a + b*j;
if(j > 0 && pos%len[i] == vis){
missyou = j;
break;
}
char tem = V[i][pos%len[i]];
if(tem < Min){
Min = tem;
k = j;
}
}
a += b*k;
b *= missyou;
ans.push_back(Min);
}
for(int i = 0;i < n;i++) printf("%c",ans[i]);
printf("\n");
}
return 0;
}
本文详细解析并提供了代码实现,涉及字符串操作、字符映射、数据结构应用等核心算法优化,旨在提高编程效率与理解深度。
595

被折叠的 条评论
为什么被折叠?



