zoukankan      html  css  js  c++  java
  • hdu Can you find it

    这道题也是道二分的题,主要有几个注意点:

    1、两个数组的合并的问题,可以将a数组和b数组合并,这样可以降低时间复杂度。

    2、二分查找的left和right的变化问题。之前这里一直wa。。。一定要是left=mid+1,right=mid-1;可以测试一下x=3和x=9以及x=10这个特殊的值。

    剩下的就是二分查找的问题了。

    #include"iostream"
    #include"stdio.h"
    #include"algorithm"
    #include"string.h"
    #include"cmath"
    #define mx 505
    using namespace std;
    int l,m,n,s,h;
    int a[mx],b[mx],c[mx],ab[mx*mx],x;
    
    bool test(int xx)
    {
                int left=0;
                int right=h-1;
                while(left<=right)
                {
                    int mid=(right+left)/2;
                    if(ab[mid]==xx) return true;
                    else if(ab[mid]>xx) right=mid-1;
                    else left=mid+1;
                }
        return false;
    }
    
    int main()
    {
        int i,j,k,p;
        int count=0;
        while(scanf("%d%d%d",&l,&m,&n)==3)
        {
            count++;
            for(i=0;i<l;i++) cin>>a[i];
            for(j=0;j<m;j++) cin>>b[j];
            for(k=0;k<n;k++) cin>>c[k];
            h=0;
            for(i=0;i<l;i++)
                for(j=0;j<m;j++)
            {
                ab[h++]=a[i]+b[j];//合并a和b
            }
            sort(c,c+n);sort(ab,ab+h);
            cout<<"Case "<<count<<":"<<endl;
            cin>>s;
            for(p=0;p<s;p++){
                    cin>>x;
                    int flag=0;
                for(i=0;i<n;i++)
              {
                    int a=x-c[i];
                    if(test(a)) {flag=1;break;}
              }
              if(flag) cout<<"YES"<<endl;
              else cout<<"NO"<<endl;
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    node项目发布pm2
    图片地址获取图片信息
    前端文件上传 获取文件大小 获取图片宽高
    前端上传图片预览
    vue按钮防暴力点击
    小程序父子组件之间的通信
    form表单
    es6-函数的扩展
    php的魔术常量以及类的模式方法
    OpenStack笔记
  • 原文地址:https://www.cnblogs.com/acm-jing/p/4321672.html
Copyright © 2011-2022 走看看