4 Values whose Sum is 0

题意:四个元素个数相等的A,B,C,D,问a+b+c+d=0的个数$(ain{A},bin{B},cin{C},din{D})$,$n<=10^3$

所以

$n^4$????

肯定不行的啊

用sum1处理出a+b的和

用sum2处理出c+d的和

然后枚举sum1,二分找sum2,求ans

然而。。。。。WA

原因:可能在sum2中有相同元素,然而只算了一次

改:不用判断是否=0,求一个upper_bound和一个lower_bound,加上它们的差即可

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int n;
int a[4020];
int b[4020];
int c[4020];
int d[4020];
int sum1[16005000];
int sum2[16005000];
int len;
int ans;
int main()
{
    ios::sync_with_stdio(false);
    ans=0;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i]>>b[i]>>c[i]>>d[i];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            sum1[++len]=a[i]+b[j];
    len=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            sum2[++len]=c[i]+d[j];
    sort(sum2+1,sum2+len+1);
    for(int i=1;i<=len;i++)
    {
        int cnt=upper_bound(sum2+1,sum2+len+1,-sum1[i])-sum2;
        int pos=lower_bound(sum2+1,sum2+len+1,-sum1[i])-sum2;
        ans=ans+cnt-pos;
    } 
    cout<<ans<<endl;
}
原文地址:https://www.cnblogs.com/olinr/p/9432130.html