AcWing 1762. 牛的洗牌(暴力)

题目链接

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;
}
上一篇:AcWing 837 连通块中点的数量


下一篇:907. 区间覆盖