zoukankan      html  css  js  c++  java
  • HDOJ2141(map在二分搜索中的应用)

    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<algorithm>
    using namespace std ;
    #define M 500 + 10
    int a[M] ;
    int b[M] ;
    int c[M] ;
    int d[M] ;
    int l ;
    int n ;
    int m ;
    map <int , bool > Map ;
    void Marge()
    {
        for(int i = 0 ;i < l ; ++ i)
            for(int j = 0 ;j < n ; ++ j)
                Map[a[i] + b[j]] = 1 ;
    }
    bool Check(int x)
    {
        int tem ;
        for(int i = 0 ;i <l ; ++ i)
        {
            tem = x - c[i] ;
            if(Map.count(tem))    return    true ;
        }
        return false ;
    }
    int main()
    {
        int s ;
        int x ;
        int T = 1 ;
        while(scanf("%d%d%d",&l ,&n , &m) != EOF )
        {
            for(int i = 0 ;i < l ; ++ i)
                scanf("%d",a + i) ;
            for(int i = 0 ;i < n ; ++ i)
                scanf("%d",b + i) ;
            for(int i = 0 ;i < m ; ++ i)
                scanf("%d",c + i) ;
            scanf("%d",&s) ;
            printf("Case %d:
    ",T ++) ;
            Marge() ;
            while(s --)
            {
                scanf("%d",&x) ;
                if(Check(x)) puts("YES") ;
                else puts("NO") ;
            }
            Map.clear() ;
        }
        return 0 ;
    }

    标准二分搜索代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std ;
    const int MAX_N=500;
    int a[MAX_N];
    int b[MAX_N];
    int c[MAX_N];
    int d[MAX_N*MAX_N];
    int l, n, m, s;
    int main()
    {
        int t=0;
        while(scanf("%d %d %d",&l, &n, &m)!=EOF)
        {
            for(int i=0; i<l; i++)
            {
                scanf("%d",&a[i]);
            }
            for(int i=0; i<n; i++)
            {
                scanf("%d",&b[i]);
            }
            for(int i=0; i<m; i++)
            {
                scanf("%d",&c[i]);
            }
            for(int i=0; i<l; i++)
            {
                for(int j=0; j<n; j++)
                {
                    d[i*n+j]=a[i]+b[j];
                }
            }
            sort(d,d+l*n);
            scanf("%d",&s);
            printf("Case %d:
    ",++t);
            while(s--)
            {
                int x;
                scanf("%d",&x);
                bool flag=false;
                for(int i=0; i<m; i++)
                {
                    if(binary_search(d,d+l*n,x-c[i]))
                    {
                        flag=true;
                        break;
                    }
                }
                if(flag)
                {
                    puts("YES");
                }
                else
                {
                    puts("NO");
                }
            }
        }
        
        return 0 ;
    }
  • 相关阅读:
    20201226 ZooKeeper
    20201220 分布式理论、架构设计(自定义RPC)
    20201217 Cluster模式潜在问题及解决方案、Web服务综合解决方案
    20201216 Nginx
    20201214 Tomcat
    20201209 Spring Boot
    20201206 Spring Data JPA
    20201205 Spring MVC
    20201128 IoC容器设计实现及Spring源码分析
    numpy数组及处理:效率对比
  • 原文地址:https://www.cnblogs.com/program-ccc/p/4770591.html
Copyright © 2011-2022 走看看