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; }