描述
给定一个由 n 个整数组成的序列 S 和一个由不同的 q 个整数组成的序列 T。编写一个程序,输出 C,即既在序列 T 中也在集合 S 中的整数个数。
输入
在第一行中给出了 n。 在第二行中,给出了 n 个整数。 在第三行中给出了 q。 然后,在第四行,给出 q 个整数。
输出
在一行中打印 C。
约束
S中的元素按升序排列
n ≤ 100000
q ≤ 50000
0 ≤ S 中的一个元素 ≤10^9
0 ≤ T 中的一个元素 ≤10^9
输入样例
5
1 2 3 4 5
3
3 4 1
输出样例
3
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int find(long long a[],int n,int k)
{
int left=0;
int right=n;
while(left<right)
{
int mid=left+(right-left)/2;
if(a[mid]==k)
{
return 1;
}
else if(a[mid]<k)
{
left=mid+1;
}
else
{
right=mid;
}
}
return 0;
}
int main()
{
int n,q;
long long s[100001],t[50001];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%lld",&s[i]);
}
scanf("%d",&q);
for(int i=0;i<q;i++)
{
scanf("%lld",&t[i]);
}
int c=0;
for(int i=0;i<q;i++)
{
if(find(s,n,t[i])==1)
{
c++;
}
}
printf("%d\n",c);
return 0;
}