POJ 2785 4 Values whose Sum is 0(折半搜索)
阿新 • • 發佈:2017-10-02
ons pre ios 題解 namespace target amp val targe
題目鏈接:http://poj.org/problem?id=2785
題意:4個集合裏各取一個數使得之和為0,問有多少種取法
題解:暴力4個for會超時,所以兩個合並一下,然後搜索唄
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 6 const int N=4444; 7 int A[N],B[N],C[N],D[N],E[N*N]; 8 9 int main(){ 10 intn,ans=0; 11 scanf("%d",&n); 12 for(int i=0;i<n;i++) scanf("%d%d%d%d",&A[i],&B[i],&C[i],&D[i]); 13 for(int i=0;i<n;i++){ 14 for(int j=0;j<n;j++){ 15 E[i+j*n]=(A[i]+B[j]); 16 } 17 } 18 sort(E,E+n*n); 19 for(int i=0;i<n;i++){20 for(int j=0;j<n;j++){ 21 int cd=-(C[i]+D[j]); 22 ans+=(upper_bound(E,E+n*n,cd)-lower_bound(E,E+n*n,cd)); 23 } 24 } 25 printf("%d\n",ans); 26 return 0; 27 }
POJ 2785 4 Values whose Sum is 0(折半搜索)