CD(链接)
Sample Input
3 3 1 2 3 1 2 4 0 0
Sample Output
2
int seach(int k)
{
int left=0,right=n2-1;
int j;
while(left<=right)
{
j=(left+right)/2;
if(a[j]==k)
return 1;
else if(a[j]>k)
right=j-1; //选择k的前一位
else
left=j+1; //选择k的后一位
}
return 0;
}
AC代码:
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1e6+10;
int a[maxn],b;
int n1,n2;
int seach(int k)
{
int left=0,right=n2-1;
int j;
while(left<=right)
{
j=(left+right)/2;
if(a[j]==k)
return 1;
else if(a[j]>k)
right=j-1;
else
left=j+1;
}
return 0;
}
int main()
{
while(~scanf("%d%d",&n1,&n2))
{
if(n1==0&&n2==0)
break;
int ans=0;
for(int i=0;i<n1;i++)
scanf("%d",&a[i]);
for(int i=0;i<n2;i++)
{
scanf("%d",&b);
if(seach(b))
ans++;
}
printf("%d\n",ans);
}
return 0;
}