1 条题解

  • 0
    @ 2026-8-12 11:25:37

    思路

    考虑枚举老师变成多高的身高(好诡异啊),再二分他应该在哪个位置,运用前缀和进行求解,十分简单

    AC代码

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=2e5+10;
    int h[N],w[N],n,m;
    int s[N];
    signed main()
    {
    	scanf("%lld%lld",&n,&m);
    	for(int i=1;i<=n;i++)scanf("%lld",&h[i]);
    	sort(h+1,h+n+1);
    //	for(int i=1;i<=n;i++)printf("%lld ",h[i]);puts("");
    	for(int i=1;i<=m;i++)scanf("%lld",&w[i]);
    	for(int i=2;i<=n;i++)s[i]=s[i-2]+h[i]-h[i-1];
    	int ans=1ll<<60;
    	for(int i=1;i<=m;i++)
    	{
    		int id=upper_bound(h+1,h+n+1,w[i])-h-1;
    		if(id>n)ans=min(ans,s[n-1]+w[i]-h[n]);
    		else if(id&1)ans=min(ans,s[id-1]+w[i]-h[id]+s[n]-s[id]);
    		else ans=min(ans,s[id]+h[id+1]-w[i]+s[n]-s[id+1]);
    //		printf("%lld %lld\n",id,ans);
    	}
    	printf("%lld\n",ans);
    	return 0;
    }
    

    题目只有三个点,每个点都只跑了1ms,估计数据很水,暴力可能可过。

    • 1

    信息

    ID
    11985
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者