The SUM PRoblem can be formulated as follows: given four lists A, B, C, D of integer values, compute how many quadruplet (a, b, c, d ) ∈ A x B x C x D are such that a + b + c + d = 0 . In the following, we assume that all lists have the same size n .
#include<iostream>#include<cmath>#include<vector>#include<algorithm>#define maxn 4000using namespace std;int map1[maxn*maxn];int map2[maxn*maxn];int a[maxn],b[maxn],c[maxn],d[maxn];int main(){ int n,i,j,k,sum,p; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]); } for(i=0;i<n;i++) for(j=0;j<n;j++) map1[i*n+j]=a[i]+b[j]; for(i=0;i<n;i++) for(j=0;j<n;j++) map2[i*n+j]=c[i]+d[j]; sort(map1,map1+n*n); sort(map2,map2+n*n); sum=0; p=n*n-1; for(i=0;i<n*n;i++) { while(p>=0&&map1[i]+map2[p]>0) p--; if(p<0) break; int temp=p; while(temp>=0&&map1[i]+map2[temp]==0) { sum++; temp--; } } printf("%d/n",sum); return 0;}
新闻热点
疑难解答