hdu 2141(二分查找,合并数组)

来源:互联网 发布:微信小视频插图软件 编辑:程序博客网 时间:2024/06/05 19:30
http://acm.hdu.edu.cn/showproblem.php?pid=2141

#include <iostream>//2141...2199...2899...2578#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <list>#include <cstdlib>#define LL long long#define M 510using namespace std;int top[3],a[M],b[M],c[M],d[500000],s;int main(){    int cas=0;    while(scanf("%d%d%d",&top[0],&top[1],&top[2])!=EOF)    {        for(int i=0; i<top[0]; i++)            scanf("%d",&a[i]);        for(int i=0; i<top[1]; i++)            scanf("%d",&b[i]);        for(int i=0; i<top[2]; i++)            scanf("%d",&c[i]);        int k=0;        for(int i=0;i<top[0];i++)        for(int j=0;j<top[1];j++)        d[k++]=a[i]+b[j];        sort(d,d+k);        printf("Case %d:\n",++cas);        scanf("%d",&s);        while(s--)        {            int x;            scanf("%d",&x);            bool flag=false;            for(int i=0; i<top[0]; i++)            {                int l=0,r=k-1;                while(l<r)                {                    int mid=l+(r-l)/2;                    if(d[mid]+c[i]>x)                    {                        r=mid;                    }                    else if(d[mid]+c[i]<x)                    {                        l=mid+1;                    }                    else                    {                        flag=true;break;                    }                }                if(flag||d[l]+c[i]==x||d[r]+c[i]==x)                {                    flag=true;                    break;                }            }            if(flag)            printf("YES\n");            else            printf("NO\n");        }    }    return 0;}


0 0
原创粉丝点击