CF187A Permutations 题解
题意
- 给出两个长度为 \(n\) 的排列。
- 每次可以把第一个排列末尾的数移到该排列中的任意位置。
- 问需要多少次操作能使两个排列相等。
- \(1 \le n \le 2 \times {10}^5\)。
思路
我们可以将第一个排列作为最终排列,并将另一个队列的末尾数从末尾不断往前移,每次移动一位,然后比较。如果不相同,继续操作,直到两个排列相等。我这里用了两个循环。
代码
#include <iostream>
using namespace std;
int main() {
int n,x,i,j=0;
cin>>n;
int a[n];
for(i=0;i<n;i++)cin>>a[i];
for(i=0;i<n;i++){ cin>>x; if(a[j]==x)j++;}
cout<<n-j;
return 0;
}

浙公网安备 33010602011771号