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 }
纵使单枪匹马,也要勇闯天涯