CF1413C Perform Easily

Jinnie

处理出所有可能的品,然后尺取法找所有的正好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;
}
原文地址:https://www.cnblogs.com/For-Miku/p/15395689.html