码迷,mamicode.com
首页 > 其他好文 > 详细

HDOJ2141(map在二分搜索中的应用)

时间:2015-08-30 12:50:09      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

#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:\n",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:\n",++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 ;
}

 

HDOJ2141(map在二分搜索中的应用)

标签:

原文地址:http://www.cnblogs.com/program-ccc/p/4770591.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!