NKSGAME - VOI08 Trò chơi với dãy số

Tác giả: happyboy99x

Ngôn ngữ: C++

#include <cstdio>
#include <algorithm>
#include <climits>
using namespace std;

#define SZ 100000+5
#define REP(i, n) for( int i = 0, _n = (n); i < _n; ++i )
int a[SZ], b[SZ], n;

int abs( int x ) { return x > 0 ? x : (-x); }

int bsearch( int * a, int x ) {
	if ( a[0] > x ) return a[0];
	if ( a[n-1] < x ) return a[n-1];
	int l = 0, h = n-1;
	while( l <= h ) {
		int mid = (l+h)/2;
		if ( a[mid] == x ) return a[mid];
		else if ( a[mid] < x ) l = mid + 1;
		else h = mid - 1;
	}
	if ( abs(a[l] - x) < abs(a[h] - x) ) return a[l];
	return a[h];
}

int main() {
	scanf( "%d", &n );
	REP(i, n) scanf( "%d", a+i ); REP(i, n) scanf( "%d", b+i );
	sort(b, b+n); int min = INT_MAX;
	REP(i, n) {
		int x = bsearch(b, -a[i]);
		int x2 = abs(a[i] + x);
		if ( x2 == 0 ) { puts("0"); return 0; }
		if ( x2 < min ) min = x2;
	}
	printf( "%d\n", min );
	return 0;
}

Download