今天为大家整理一类经典题目——二分问题,这类问题在普及提高组竞赛中经常出现,而且经常作为难点出现,所以同学们要在刚开始接触的时候就要打好基础,熟练运用模板,在以后的竞赛中才能做到手到擒来。
题目描述
题解代码:
#include<iostream>
#include<string>
using namespace std;
int n,m;
//找出小于等于该值的最大值
long long a[100005],b[50005];
/*
bool binary_search(long long value){
int l=0,r=n-1;
while(l<r){
int mid=(l+r+1)/2;
if(a[mid]<=value){
l=mid;
}
else{
r=mid-1;
}
}
if(a[l]==value)
{
return true;
}
return false;
}
*/
//找出大于等于的最小值
bool binary_search(long long value){
int l=0,r=n-1;
while(l<r){
int mid=(l+r)/2;
if(a[mid]>=value){
r=mid;
}
else{
l=mid+1;
}
}
if(a[r]==value){
return true;
}
return false;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
}
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%lld",&b[i]);
}
int ans=0;
for(int i=0;i<m;i++){
bool flag=binary_search(b[i]);
if(flag==true){
ans++;
}
}
printf("%d",ans);
return 0;
}