zoukankan      html  css  js  c++  java
  • hdu 2141 Can you find it? 二分查找

    三个整数数列A,B,C。给若干个数X,若能找到Ai+Bj+Ck = X(Ai是数列A中的某一个数,Bj,Ck同理),输出YES,否则输出NO。
    先是做A和B数列各元素的和并排序,接下来只要二查找X-C,就可以了。

    #include <iostream>
    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include <queue>
    #include <algorithm>
    using namespace std;
    int a[501],b[501],c[501],sum[250001],L,M,N,k;
    bool find(int x)
    {
        int i,low,high,t,mid;
            for(i=0;i<N;i++)
            {
            t=x-c[i];
            mid=(N-1)/2;
            low=0;high=k-1;
            while(low<=high)
            {
                if(sum[mid]==t)
                {
                    printf("YES\n");
                    return true;
                }
                else if(t<sum[mid])
                    high=mid-1;
                else
                    low=mid+1;
                mid=(low+high)/2;
            }
        }
        return false;
    }
    int main()
    {
        int S,x,cas=1,i,j;
        while(scanf("%d%d%d",&L,&M,&N)!=EOF)
        {
            for(i=0;i<L;i++)
            scanf("%d",&a[i]);
            for(i=0;i<M;i++)
            scanf("%d",&b[i]);
            for(i=0;i<N;i++)
            scanf("%d",&c[i]);
            k=0;
            for(i=0;i<L;i++)
            for(j=0;j<M;j++)
            sum[k++]=a[i]+b[j];
            sort(sum,sum+k);
            scanf("%d",&S);
            printf("Case %d:\n",cas++);
            while(S--)
            {
                scanf("%d",&x);
                if(!find(x))
                printf("NO\n");
            }
        }
        return 0;
    }

                       

              
  • 相关阅读:
    php打印出10*10表格
    php打印出1到2000年之间所有的闰年
    借鉴一篇好文章
    女程序员的预备篇
    SQL存储过程删除数据库日志文件的方法
    Mongodb无法访问28107的问题
    使用 xsd.exe 命令工具将 xsd 架构生成 类(CS) 文件
    C# 用POST提交json数据
    WinForm 使用 HttpUtility
    Sql Server 分区之后增加新的分区
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740250.html
Copyright © 2011-2022 走看看