Time Limit: 5 second
Memory Limit: 1000K
Discription
历史老师决定简化考试的过程。每个学生只需写下著名事件发生的年份就行了。老师有自己的年份表。学生得多少分取决于他写下的年份有多少是包含在老师的年份表中。
Input Format
首行为N,是老师年份表中的年数。 1 <= N <= 15000,对下N行包含老师的年份表,每一个年份不超过10^9。以升序排列。
再下来M行,是学生的年份表的年数。1 <= M <= 1000000,对下M行包含学生的年份表。这个表没有排序,年份可以不止一次出现。
Output Format
输出一个数,即学生的年份表中有多少个是包含在老师的表中。
Sample Input
2
1054
1492
4
1492
65536
1492
100
Sample Output
2
二分
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <cmath>
#define loc
#define mxn 15000+10
using namespace std;
int n,m;
int tc[mxn];
int bs(int x)
{
int l=0,r=n;
while (l<=r)
{
int m=(l+r)>>1;
if (tc[m]==x) return 1;
if (tc[m]>x) r=m-1;
else l=m+1;
}
return 0;
}
int main()
{
freopen("exam.in","r",stdin);
freopen("exam.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;++i)
{
scanf("%d",tc+i);
}
int tot=0,tm;
scanf("%d",&m);
for (int i=1;i<=m;++i)
{
scanf("%d",&tm);
tot+=bs(tm);
}
printf("%d",tot);
return 0;
}
Set
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <cmath>
#include <set>
#define loc
#define mxn
#define mxm
using namespace std;
int n,m,t;
set<int>S;
int main()
{
freopen("exam.in","r",stdin);
freopen("exam.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;++i)
{
scanf("%d",&t);
S.insert(t);
}
int tot=0;
scanf("%d",&m);
for (int i=1;i<=m;++i)
{
scanf("%d",&t);
if (S.find(t)!=S.end()) ++tot;
}
printf("%d",tot);
return 0;
}