题意:四个元素个数相等的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; }