不知道为什么只能过70,蒟蒻求解
查看原帖
不知道为什么只能过70,蒟蒻求解
197660
买茶楼主2023/10/13 17:26

不知道为什么只能过70 蒟蒻求解

#include<stdio.h>
#define N 100001
int m,n,a[N],b[N],ans,mid,l,r;
void swap(int *a,int *b)
{
	int t=*a;
	*a=*b;
	*b=t;
}
void qsort(int l,int r)
{
	int i=l,j=r;
	int mid=a[(l+r)/2];
	while(i<=j)
	{
		while(a[i]<mid) i++;
		while(a[j]>mid) j--;
		if(i<=j)
		{
			swap(&a[i],&a[j]);
			i++;
			j--;
		}
	}
	if(l<j) qsort(l,j);
	if(i<r) qsort(i,r);
}
int abs(int x)
{
	if(x>=0) return x;
	if(x<0) return -x;
}
int main()
{
	scanf("%d%d",&m,&n);
	for(int i=1;i<=m;i++) scanf("%d",&a[i]);
	qsort(1,m);
	for(int i=1;i<=n;i++) scanf("%d",&b[i]);
	for(int i=1;i<=n;i++)
	{
		l=1,r=m;
		while(l<=r)
		{
			mid=(l+r)/2;
			if(b[i]>=a[mid]) l=mid+1;
			if(b[i]<a[mid]) r=mid-1;
		}
		if(abs(b[i]-a[l])<=abs(b[i]-a[r])) ans+=abs(b[i]-a[l]);
		else ans+=abs(b[i]-a[r]);
	}
	printf("%d",ans);
	return 0;
}

2023/10/13 17:26
加载中...