zoukankan      html  css  js  c++  java
  • HDU 2141 Can you find it?【二分查找是否存在ai+bj+ck=x】

    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

    【STL版本】

    #include<cstdio>
    #include<string>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<cstring>
    #include<set>
    #include<queue>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<cctype>
    #include<stack>
    #include<sstream>
    #include<list>
    #include<assert.h>
    #include<bitset>
    #include<numeric>
    #define debug() puts("++++")
    #define gcd(a,b) __gcd(a,b)
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define fi first
    #define se second
    #define pb push_back
    #define sqr(x) ((x)*(x))
    #define ms(a,b) memset(a,b,sizeof(a))
    #define sz size()
    #define be begin()
    #define pu push_up
    #define pd push_down
    #define cl clear()
    #define lowbit(x) -x&x
    #define all 1,n,1
    #define rep(i,x,n) for(int i=(x); i<(n); i++)
    #define in freopen("in.in","r",stdin)
    #define out freopen("out.out","w",stdout)
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ULL;
    typedef pair<int,int> P;
    const int INF = 0x3f3f3f3f;
    const ll LNF = 1e18;
    const int maxn = 1e3 + 20;
    const int maxm = 1e6 + 10;
    const double PI = acos(-1.0);
    const double eps = 1e-8;
    const int dx[] = {-1,1,0,0,1,1,-1,-1};
    const int dy[] = {0,0,1,-1,1,-1,1,-1};
    int dir[4][2] = {{0,1},{0,-1},{-1,0},{1,0}};
    const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    ll quickpow(ll a, ll b) {
        ll ans = 0;
        while (b > 0) {
            if (b % 2)ans = ans * a;
            b = b / 2;
            a = a * a;
        }
        return ans;
    }
    
    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a%b);
    }
    
    
    bool cmp(int a, int b) {
        return a > b;
    }
    int l,n,m,q,x;
    int a[maxn],b[maxn],c[maxn];
    int ab[250005];
    /*
    ai + bj + ck = x ——>
    ai + bj = x -ck
    1 2 3
    1 2 3
    1 2 3
    */
    int main()
    {
        int cas = 1;
        while(~scanf("%d%d%d",&l,&n,&m))
        {
    
            int f = 0, k;
            ms(a,0),ms(b,0),ms(c,0),ms(ab,0);
            rep(i,0,l)
                scanf("%d",&a[i]);
            rep(i,0,n)
                scanf("%d",&b[i]);
            rep(i,0,m)
                scanf("%d",&c[i]);
            k = 0;
            rep(i,0,l)
            {
                rep(j,0,n)
                {
                    ab[k++] = a[i] + b[j];
                }
            }
            sort(ab,ab+k);
            sort(c,c+m);
            printf("Case %d:
    ",cas++);
            scanf("%d",&q);
            while(q--)
            {
    
                //在ab数组二分查找 x - c[i]
                f = 0;
                scanf("%d",&x);
                for(int j=0;j<m;j++)
                {
                    int pos = lower_bound(ab,ab+k,x-c[j]) - ab;
                    if(ab[pos] == x - c[j])
                    {
                        f = 1;
                        break;
                    }
                   
                }
                if(f) printf("YES
    ");
                else printf("NO
    ");
            }
        }
    }
    

    【手写二分版本】:

    #include<cstdio>
    #include<string>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<cstring>
    #include<set>
    #include<queue>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<cctype>
    #include<stack>
    #include<sstream>
    #include<list>
    #include<assert.h>
    #include<bitset>
    #include<numeric>
    #define debug() puts("++++")
    #define gcd(a,b) __gcd(a,b)
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define fi first
    #define se second
    #define pb push_back
    #define sqr(x) ((x)*(x))
    #define ms(a,b) memset(a,b,sizeof(a))
    #define sz size()
    #define be begin()
    #define pu push_up
    #define pd push_down
    #define cl clear()
    #define lowbit(x) -x&x
    #define all 1,n,1
    #define rep(i,x,n) for(int i=(x); i<(n); i++)
    #define in freopen("in.in","r",stdin)
    #define out freopen("out.out","w",stdout)
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ULL;
    typedef pair<int,int> P;
    const int INF = 0x3f3f3f3f;
    const ll LNF = 1e18;
    const int maxn = 1e3 + 20;
    const int maxm = 1e6 + 10;
    const double PI = acos(-1.0);
    const double eps = 1e-8;
    const int dx[] = {-1,1,0,0,1,1,-1,-1};
    const int dy[] = {0,0,1,-1,1,-1,1,-1};
    int dir[4][2] = {{0,1},{0,-1},{-1,0},{1,0}};
    const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    ll quickpow(ll a, ll b) {
        ll ans = 0;
        while (b > 0) {
            if (b % 2)ans = ans * a;
            b = b / 2;
            a = a * a;
        }
        return ans;
    }
    
    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a%b);
    }
    
    
    bool cmp(int a, int b) {
        return a > b;
    }
    int l,n,m,q,x;
    int a[maxn],b[maxn],c[maxn];
    int ab[250005];
    /*
    ai + bj + ck = x ——>
    ai + bj = x -ck
    1 2 3
    1 2 3
    1 2 3
    */
    int main()
    {
        int cas = 1;
        while(~scanf("%d%d%d",&l,&n,&m))
        {
    
            int f = 0, k;
            ms(a,0),ms(b,0),ms(c,0),ms(ab,0);
            rep(i,0,l)
                scanf("%d",&a[i]);
            rep(i,0,n)
                scanf("%d",&b[i]);
            rep(i,0,m)
                scanf("%d",&c[i]);
            k = 0;
            rep(i,0,l)
            {
                rep(j,0,n)
                {
                    ab[k++] = a[i] + b[j];
                }
            }
            sort(ab,ab+k);
            sort(c,c+m);
            printf("Case %d:
    ",cas++);
            scanf("%d",&q);
            while(q--)
            {
    
                //在ab数组二分查找 x - c[i]
                f = 0;
                scanf("%d",&x);
                for(int j=0;j<m;j++)
                {
                    int l = 0, r = k - 1, mid;
                    while(l <= r)
                    {
                        mid = (l+r)/2;
                        if(ab[mid] == x-c[j])
                        {
                            f=1;break;
                        }
                        else if(ab[mid]<x-c[j]) l=mid+1;
                        else if(ab[mid]>x-c[j]) r=mid-1;
                    }
                    if(f) break;
    
                }
                if(f) printf("YES
    ");
                else printf("NO
    ");
            }
        }
    }
    
    
    
  • 相关阅读:
    新浪微盘又是一个给力的产品啊,
    InfoQ: 百度数据库架构演变与设计
    列式数据库——Sybase IQ
    MapR初体验 淘宝共享数据平台 tbdata.org
    IBM正式发布新一代zEnterprise大型机(组图) 大型机,IBM,BladeCenter,美国,纽约 TechWeb News
    1TB is equal to the number of how many GB? 1PB equal to is equal to the number of TB? 1EB PB? | PCfault.com
    Cassandra vs HBase | WhyNosql
    The Hadoop Community Effect
    雅虎剥离开源软件平台 Hadoop ,与风投新建 Hortonworks 公司 品味雅虎
    RowOriented Database 、ColumnOriented Database 、KeyValue Store Database 、DocumentOriented Database
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9358132.html
Copyright © 2011-2022 走看看