1. 程式人生 > >POJ 2785 4 Values whose Sum is 0(折半搜索)

POJ 2785 4 Values whose Sum is 0(折半搜索)

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     int
n,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(折半搜索)