zoukankan      html  css  js  c++  java
  • 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
    ", ans);
    48     }
    49 return 0;
    50 }
  • 相关阅读:
    keras多层感知机MLP
    局域网互通
    根号和分式
    vim简单的移动光标
    vim几种常用的插入模式
    LaTeX数学模式&上下标&代码块
    LaTeX入门
    ThinkPad X220i 安装 Mac OSX
    SUSE linux ,liveUSB制作方法
    KextWizard 的使用方法;以及Kext安装的几种工具下载
  • 原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6561845.html
Copyright © 2011-2022 走看看