处理出所有可能的品,然后尺取法找所有的正好n个的地方,取答案
正确性?假如正确答案不是n个连在一起,那么中间无论多了谁,一定会不止多一个
并且一定会存在一种n个在一起的更优解
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
int t;
int n;
int cnt;
int a[7];
int vis[10000001];
int b[10000001];
pair<int,int> p[700001];
signed main(){
// scanf("%d",&t);
for(int i=1;i<=6;++i){
scanf("%lld",&a[i]);
}
scanf("%lld",&n);
for(int i=1;i<=n;++i){
scanf("%lld",&b[i]);
for(int j=1;j<=6;++j){
p[++cnt]=make_pair(b[i]-a[j],i);
}
}
long long ans=1000000000011;
sort(p+1,p+cnt+1);
int now=0;
int l=1;
int r=1;
while(r<=cnt){
if(vis[p[r].second]==0) now++;
++vis[p[r].second];
while(vis[p[l].second]>1){
vis[p[l].second]--;
l++;
}
if(now==n){
ans=min(ans,p[r].first-p[l].first);
}
r++;
}
cout<<ans;
return 0;
}