洛谷P5804 [SEERC2019]Absolute Game

链接:[SEERC2019]Absolute Game - 洛谷

 思路:不管怎么找都会剩一个,既然如此就直接选一个留下来,每个数找一遍就行了,这个数满足的要求就是b组和它最近的两个数的最小绝对值在所有数中最大。

code:

#include<bits/stdc++.h>
using namespace std;
long long q1[1005],q2[1005];
int main(){
	int t,x,y,z,max=0,ans=0;
	scanf("%d",&t);
	for(int i=1;i<=t;i++) scanf("%d",&q1[i]);
	for(int i=1;i<=t;i++) scanf("%d",&q2[i]);
	sort(q2+1,q2+t+1);
	for(int i=1;i<=t;i++) {
		z=lower_bound(q2+1,q2+t+1,q1[i])-q2;
		if(z==1) {
			if(max<q2[z]-q1[i]) max=q2[z]-q1[i];
		}
		else if(z>1&&z<=t){
			if(max<q2[z]-q1[i]&&max<q1[i]-q2[z-1]) max=min(q2[z]-q1[i],q1[i]-q2[z-1]);
		}
		else if(z>t){
			if(max<q1[i]-q2[z-1]) max=q1[i]-q2[z-1];
		}
	}
	printf("%d",max);
}