题目链接?
思路:逆向模拟,将a[i]位置的id放到i位置,用last数组来记录上一次各位置的id。
memcpy的用法:void *memcpy(void *destin, void *source, unsigned n);函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxx = 1e5 + 10;
const int inf=0x3f3f3f3f;
int n;
int pos[110];
int last[110];
int a[110];
void solve()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&last[i]);
int op=3;
while(op--)
{
for(int i=1;i<=n;i++)
{
pos[i]=last[a[i]];
}
for(int i=1;i<=n;i++) last[i]=pos[i];//memcpy(last,pos,sizeof(pos))
}
for(int i=1;i<=n;i++)
{
printf("%d\n",pos[i]);
}
}
int main()
{
int _t=1;
//scanf("%d", &_t);
while (_t--)
{
solve();
}
system("pause");
}
|