一条直线上,对于a,b两人想去c,d两地,两个人各去一地,假设a位置小于b,c位置小于d。显然a去d,b去c的最长时间肯定要大于a去c,b去d的最长时间,那么完美可以将人的位置和通行证位置排序,对于i+n-1<=k,枚举每一个位置在循环计算最长时间即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define N 5005
int n, k;
int a[N];
小红所在公司有n名员工,这n名员工的初始位置在a[i],办公室的位置在p。
有k个通行证,这k个通行证的位置在b[i],每个位置有且只有一个通行证。
这个位置的通行证如果被拿走了,这里就没有通行证了,其他员工无法在这个位置拿到通行证了。
员工上班之前必须拿到通行证,每个通行证只能供一个人使用,一个位置上最多只有一个通行证。
员工的初始位置可能和通行证的初始位置相同。
每名员工必须有通行证才能进办公室(员工先要去列拿到通行证,然后再去办公室地点p),员工移动1单位距离需要花费一单位时间。
请问这n个员工都达到办公室的最短时间是多少。
第一行三个整数n,k,p(1<=n<=1000,n<=k<=2000,1≤p≤109)
第二行n个整数a[i](1≤a[i]≤109)。
第三行k个整数b[i](1≤b[i]≤109)。
输出一行,一个整数表示这n个员工都达到办公室的最短时间。
输入
2 4 50
20 100
60 10 40 80
输出
50