题目链接
http://codeforces.com/problemset/problem/1073/B
题意
给定n,长度为n的数组1,长度为n的数组2。
按照数组2的顺序从数组1中拿值,求每拿一个值需要的步数。如果该值已在包中,步数为0.
题解
用一个标记数组vis记录下某个值是否已拿;未拿的话就用cnt去计数拿到该值的步数即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+7;
int a[maxn];
bool vis[maxn];
int main()
{
int n;
while(cin>>n)
{
queue<int> que;
memset(vis,false,sizeof(vis));
for(int i=0;i<n;i++)
{
int x;
cin>>x;
que.push(x);
}
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
{
int t=a[i];
if(vis[t]) cout<<0;
else
{
int cnt=0;
while(true)
{
int now=que.front();que.pop();
vis[now]=true;
++cnt;
if(now==t) break;
}
cout<<cnt;
}
if(i==n-1) cout<<endl;
else cout<<" ";
}
}
return 0;
}