• Can you find it?(hdu 2141 二分查找)


    Can you find it?

    Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others)
    Total Submission(s): 19416    Accepted Submission(s): 4891


    Problem Description
    Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate if you can find the three numbers Ai, Bj, Ck, which satisfy the formula Ai+Bj+Ck = X.
     
    Input
    There are many cases. Every data case is described as followed: In the first line there are three integers L, N, M, in the second line there are L integers represent the sequence A, in the third line there are N integers represent the sequences B, in the forth line there are M integers represent the sequence C. In the fifth line there is an integer S represents there are S integers X to be calculated. 1<=L, N, M<=500, 1<=S<=1000. all the integers are 32-integers.
     
    Output
    For each case, firstly you have to print the case number as the form "Case d:", then for the S queries, you calculate if the formula can be satisfied or not. If satisfied, you print "YES", otherwise print "NO".
     
    Sample Input
    3 3 3
    1 2 3
    1 2 3
    1 2 3
    3
    1
    4
    10
     
    Sample Output
    Case 1:
    NO
    YES
    NO
     
    lower_bound提交就会出错,binary_search()也可以过
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <algorithm>
     5 #include <set>
     6 using namespace std;
     7 int a[502],b[502],c[502],x;
     8 __int64 su[502*502];
     9 int l,n,m,s,u;
    10 int d=1,sum;
    11 bool solve(int x)
    12 {
    13     int i,k;
    14     int ans;
    15     for(i=0;i<m;i++)
    16     {
    17         ans=x-c[i];
    18         int l=0,r=u-1,mid,e;
    19         while(l<=r)
    20         {
    21             mid=(l+r)/2;
    22             if(su[mid]==ans)    return 1;
    23             else if(su[mid]>ans)    r=mid-1;
    24             else l=mid+1;
    25         }
    26     }
    27     return 0;
    28 }
    29 int main()
    30 {
    31     int i,j;
    32     freopen("in.txt","r",stdin);
    33     while(scanf("%d%d%d",&l,&n,&m)!=EOF)
    34     {
    35         for(i=0;i<l;i++)    scanf("%d",&a[i]);
    36         for(i=0;i<n;i++)    scanf("%d",&b[i]);
    37         for(i=0;i<m;i++)    scanf("%d",&c[i]);
    38         scanf("%d",&s);
    39         u=0;
    40         for(i=0;i<l;i++)
    41             for(j=0;j<n;j++)
    42                 su[u++]=a[i]+b[j];
    43         sort(su,su+u);
    44         printf("Case %d:
    ",d++);
    45         for(i=0;i<s;i++)
    46         {
    47             scanf("%d",&x);
    48             if(solve(x))    printf("YES
    ");
    49             else     printf("NO
    ");
    50         }
    51     }
    52 }
  • 相关阅读:
    k8s采坑记
    [dotnet] 封装一个同时支持密码/安全密钥认证的SFTP下载器,简单易用。
    亲测可用,iptables实现NAT转发。
    【转】干货,Kubernetes中的Source Ip机制。
    k8s实践
    干货!分享一款windows下的磁盘分析神器。
    干货,不小心执行了rm -f,除了跑路,如何恢复?
    Java8函数式编程
    搭建git服务器
    Python3安装
  • 原文地址:https://www.cnblogs.com/a1225234/p/5064572.html
Copyright © 2020-2023  润新知