1. 程式人生 > >POJ 2785 折半搜索

POJ 2785 折半搜索

pan using div typedef bound mes names code ring

https://vjudge.net/problem/POJ-2785

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
#include<algorithm>
#include<map>
#define maxn 4005
typedef long long ll;
using namespace std;
int n;
ll a[maxn],b[maxn],c[maxn],d[maxn];
ll cd[maxn
*maxn];//記錄c和d數組的和的數組 int main() { while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) { cin>>a[i]>>b[i]>>c[i]>>d[i]; } //把c和d的和組成cd數組 for(int i=0;i<n;i++) for(int j=0;j<n;j++){ cd[i*n+j]=c[i]+d[j]; } sort(cd,cd
+n*n); ll res=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { //cout<<"a"<<endl; ll ans=-(a[i]+b[j]); res+=upper_bound(cd,cd+n*n,ans)-lower_bound(cd,cd+n*n,ans); // 返回第一個大於等於ans的位置 返回第一個大於ans的位置
//最後返回相等ans的位置 } cout<<res<<endl; } return 0; }

POJ 2785 折半搜索