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;
    }
  • 相关阅读:
    个人博客
    个人博客
    5.4
    4.30
    4.29
    4.28
    4.27
    4.26
    4.25
    4.24
  • 原文地址:https://www.cnblogs.com/huangzzz/p/9279539.html
Copyright © 2011-2022 走看看