zoukankan      html  css  js  c++  java
  • POJ 2785 折半搜索

    https://vjudge.net/problem/POJ-2785

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<set>
    #include<algorithm>
    #include<map>
    #define maxn 4005
    typedef long long ll;
    using namespace std;
    int n;
    ll a[maxn],b[maxn],c[maxn],d[maxn];
    ll cd[maxn*maxn];//记录c和d数组的和的数组
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0;i<n;i++)
            {
                cin>>a[i]>>b[i]>>c[i]>>d[i];
            }
            //把c和d的和组成cd数组
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++){
                cd[i*n+j]=c[i]+d[j];
                }
                sort(cd,cd+n*n);
                ll res=0;
                for(int i=0;i<n;i++)
                    for(int j=0;j<n;j++)
                {
                    //cout<<"a"<<endl;
                    ll ans=-(a[i]+b[j]);
                    res+=upper_bound(cd,cd+n*n,ans)-lower_bound(cd,cd+n*n,ans);
                    //   返回第一个大于等于ans的位置     返回第一个大于ans的位置
                    //最后返回相等ans的位置
                }
                cout<<res<<endl;
        }
        return 0;
    }
  • 相关阅读:
    codeforces
    hdu
    hdu
    poj 2823
    hdu
    hdu
    hdu
    微信公众号 SDK
    PHP 正则表达式
    注册和登录时的验证码
  • 原文地址:https://www.cnblogs.com/huangzzz/p/9279539.html
Copyright © 2011-2022 走看看