条件a+b == d-c,O(n*n)枚举出所有的形如a+b的和,然后从大到小枚举d,在枚举c,二分找d-c。
主要是要用容斥排除c和d出现在和中,详细的过程见注释。
复杂度为O(n^2log(n^2))。
/********************************************************** ------------------ ** author AbyssalFish ***********************************************************/#include #include #include #include #include #include #include #include #include
伪二分O(n^3) ???
int solve(){ sort(e,e+n); int i, j, sum, lb, ub, tsum; for(i = n; i--; ){ for(j = 2; j < n; j++)if(i!=j){ sum = e[i]-e[j]; for(lb = 0,ub = j-1; lb < ub; ){ //状态是DAG tsum = e[lb]+e[ub]; if(tsum == sum) return e[i]; tsum > sum ? ub--:lb++; //O(n) } } } return INF;}