NYOJ626 intersection set

原题链接

用C++结果TLE了三次,换成C就过了..时间:744,内存:424

#include <cstdio>
#include <algorithm>
#define MAX 50000 + 2
int a[MAX];
using namespace std;

int main(){
	int m, n, i, t, sum;
	while(scanf("%d%d", &m, &n) == 2){
		for(i = 0; i != m; ++i)
			scanf("%d", &a[i]);
		sort(a, a + m);
		for(i = sum = 0; i != n; ++i){
			scanf("%d", &t);
			if(binary_search(a, a + m, t))
				++sum;
		}
		printf("%d\n", sum);
	}
	return 0;
}


优化后的下标索引法:时间:308,内存:620

#include <cstdio>
#include <cstring>
#define MAX 100000 + 2
int a[MAX];

int main(){
	int m, n, i, t, sum;
	while(scanf("%d%d", &m, &n) == 2){
		sum = 0;
		while(m--){
			scanf("%d", &t);
			a[t] = 1;
		}
		while(n--){
			scanf("%d", &t);
			if(a[t]) ++sum;
		}
		printf("%d\n", sum);
		memset(a, 0, sizeof(a));
	}
	return 0;
}


posted on 2014-03-01 21:43  长木Qiu  阅读(99)  评论(0编辑  收藏  举报