问题 : 用二分搜索试试
问题描述:
请编写一个程序,输入包含n(n<=100000)个整数的数列S以及包含q个(q<=50000)不重复整数的数列T,输出既包含于T也包含于S的整数的个数C。S、T中的元素均大于0且小于109。S的元素按升序排列,T的元素不重复。
输入:
第一行输入n,第二行输入代表S的n个整数,第三行输入q,第四行输入代表T的q个整数。
输出:
用1行输出C。
输入:
第一行输入n,第二行输入代表S的n个整数,第三行输入q,第四行输入代表T的q个整数。
样例输入
5
1 2 3 4 5
3
3 4 1
样例输出
3
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,q,c=0;
int s[100010],t;
while(~scanf("%d",&n)){
c=0;
for(int i=0;i<n;i++){
scanf("%d",&s[i]);
}
scanf("%d",&q);
while(q--){
scanf("%d",&t);
//二分算法
int low=0,high=n-1;
while(low<=high){
int mid=(low+high)/2;
if(t==s[mid]){
c++;
break;
}
else if(t<s[mid]){
high=mid-1;
}
else{
low=mid+1;
}
}
}
printf("%d\n",c);
}
return 0;
}