题目链接
https://www.acwing.com/problem/content/1764/
思路
因为我们要做三次它的排序,那么我们初始状态的话每个位置上的编号就是本身,然后我们定义一个b数组表示的是最后排出的结果,那么每次我们更新b数组的值的时候需要用到我们上一个状态的值,所以我们定义一个c数组存储b数组上一个状态的值即可,最后我们按照我们b数组顺序将字符串映射到对应的地方即可,详情请看代码
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e2+10;
int a[N],n,b[N],c[N];
vector<string> V(N);
int main()
{
cin>>n;
for(int i = 1;i <= n; ++i) cin>>a[i],b[i] = i,c[i] = i;
for(int i = 1;i <= 3; ++i,memcpy(c,b,sizeof b))
for(int j = 1;j <= n; ++j)
b[a[j]] = c[j];
string s;
for(int i = 1;i <= n; ++i)
cin>>s,V[b[i]] = s;
for(int i = 1;i <= n; ++i) cout<<V[i]<<endl;
return 0;
}