第一眼看到就觉得是二分答案,但是没有仔细去想,就放弃了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read()
{
ll ret=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
for(; ch>='0'&&ch<='9'; ch=getchar()) ret=ret*10+ch-'0';
return ret;
}
ll a[3005],b[3005];
ll n,k,p;
bool f(int x)
{
int j=1;
for(int i=1;i<=n;)
{
if(j==k+1) return 0;
if(abs(a[i]-b[j])+abs(b[j]-p)<=x)i++,j++;
else j++;
}
return 1;
}
int main()
{
n=read(),k=read(),p=read();
for(int i=1; i<=n; i++)
a[i]=read();
for(int i=1; i<=k; i++)
b[i]=read();
if(n==1)
{
ll ans=2e10+10;
for(int i=1; i<=k; i++)
ans=min(ans,abs(a[1]-b[k])+abs(b[k]-p));
cout<<ans<<endl;
return 0;
}
sort(a+1,a+n+1);
sort(b+1,b+k+1);
ll l=0,r=4e9+5,mid;
while(l<=r)
{
mid=(l+r)/2;
if(f(mid)) r=mid-1;
else l=mid+1;
}
cout<<l<<endl;
}