标签:传送门 技术分享 分享 scan 数组 eof style images png
传送门:http://poj.org/problem?id=3579
题意
给你n个数,然后求它们两两相减的绝对值,然后找出这些绝对值的中中位数。 解题思路:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int MAXN=1000005; int val[MAXN]; int N,M; bool calc(int mid){ int sum=0; //这儿如何计算绝对值<mid的个数. for(int i=0;i<N;i++) sum+=((lower_bound(val+i,val+N,val[i]+mid+1)-(val+i))-1); return sum>=M; } int main(){ while(scanf("%d",&N)!=EOF){ for(int i=0;i<N;i++){ scanf("%d",&val[i]); } M=(N*(N-1)/2+1)/2; sort(val,val+N); int l=0,r=val[N-1]-val[0]; while(r-l>1){ int mid=(l+r)>>1; if(calc(mid)) r=mid; else l=mid; } cout<<r<<endl; } return 0; }
标签:传送门 技术分享 分享 scan 数组 eof style images png
原文地址:http://www.cnblogs.com/IKnowYou0/p/6698539.html