CF1413C Perform Easily 题解
解题思路
其实是很简单的一道题,考虑计算出所有
该种做法时间复杂度
其实可以再优化一点的。显然,上面的做法会计算一些重复的值,我们考虑去除这些重复的值。不难想到,两个相同的
AC 代码
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include <set>
#include <valarray>
#include <map>
#define N 100005
#define M 800
int n,a[10],b[N];
struct Point{
int val;
int pos;
}A[N<<3];int m;
inline bool cmp(Point x,Point y){
return x.val<y.val;
}
signed main(){
scanf("%d%d",&a[1],&a[2]);
scanf("%d%d",&a[3],&a[4]);
scanf("%d%d",&a[5],&a[6]);
scanf("%d",&n);
std::sort(a+1,a+6+1);
int t=std::unique(a+1,a+7)-a-1;
for(register int i=1;i<=n;++i)
scanf("%d",&b[i]);
std::sort(b+1,b+n+1);
n=std::unique(b+1,b+n+1)-b-1;
for(register int i=1;i<=n;++i)
for(register int j=1;j<=t;++j)
A[++m]={b[i]-a[j],i};
std::sort(A+1,A+m+1,cmp);
int r=0,ans=2e9+7,res=0;
std::map<int,int> cnt;
for(register int i=1;i<=m;++i){
while(r<m&&res<n){++r;
if(!cnt[A[r].pos])
++res;
++cnt[A[r].pos];
}if(res<n) break;
if(A[r].val-A[i].val<ans)
ans=A[r].val-A[i].val;
--cnt[A[i].pos];
if(!cnt[A[i].pos]) --res;
}printf("%d",ans);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示