POJ 2785 折半搜索
阿新 • • 發佈:2018-07-08
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 折半搜索