HDU 3763 CDs
http://acm.hdu.edu.cn/showproblem.php?pid=3763
题意:
两组数据
看重复的有多少
如果每输入一个就去查找的话O(n^2) 会超时
所以可以用二法
第一组数据输入
然后第二组数据输入 在第一组数据用二分查 这样O(n*logn)
不能用set等容器 虽然时间复杂度是一样的但是 MLE
还有一种O(n)的做法
枚举a数组中的元素,然后用一个指针指向b数组中第一个大于等于a数组当前元素的数,不断移动这个指针即可
1 #include <iostream> 2 #include <stdio.h> 3 4 using namespace std; 5 6 7 int a[1000007]; 8 int b[1000007]; 9 int n; 10 bool search(int x) 11 { 12 int l = 0, r = n-1; 13 int mid = (l+r)/2; 14 while(l <= r) 15 { 16 if (a[mid] < x){ 17 l = mid+1; 18 mid = (l+r) / 2; 19 } 20 else if (a[mid] > x) 21 { 22 r = mid-1; 23 mid = (l+r)/2; 24 } 25 else return true; 26 } 27 return false; 28 29 } 30 int main() 31 { 32 freopen("in.txt", "r", stdin); 33 int m, ans = 0; 34 while(~scanf("%d%d", &n, &m)) 35 { 36 ans = 0; 37 if ( m== 0 && n == 0) break; 38 for (int i = 0; i < n; i++) 39 scanf("%d", &a[i]); 40 int tmp; 41 for (int i = 0; i < m; i++) 42 { 43 scanf("%d", &tmp); 44 if (search(tmp)) 45 ans++; 46 } 47 printf("%d\n", ans); 48 } 49 return 0; 50 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步