codeforces1237B

传送门:https://codeforces.com/contest/1237/problem/B

题意:一开始有n辆车 的一个排列,他们的编号为 1 - n,现在经过一个隧道,然后给你一个出去后的排列,问有多少车违章。

思路:双指针。一个指向隧道前 的排列,一个指向隧道后的排列。然后找出不同的,累加1即可。

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int maxn=1e5+5;
 5 
 6 int a[maxn],b[maxn],c[maxn];
 7 
 8 int main()
 9 {
10     int n;
11     scanf("%d",&n);
12     for(int i=1;i<=n;i++){
13         scanf("%d",&a[i]);
14     }
15     for(int i=1;i<=n;i++){
16         scanf("%d",&b[i]);
17     }
18     int l=1,r=1;
19     int ans=0;
20     while(l<=n&&r<=n)
21     {
22         if(a[l]!=b[r]){
23             c[b[r]]=1;
24             ans++;
25             r++;
26         }
27         else{
28             l++,r++;
29         }
30         while(c[a[l]]!=0)l++;
31     }
32     cout<<ans<<endl;
33     return 0;
34 }

 

posted @ 2019-11-11 19:06  sj-_-js  阅读(165)  评论(0编辑  收藏  举报