G2. Dances (Hard Version)

原题链接

题解

先贪心地令 \(a\)\(b\) 配对,设最大的没有配对到的 \(b\)\(k\)
为什么?因为这样保证了留给 \(m\)\(b\) 是最大的,且原本数组的配对数量也是最优的

接下来 \(m\) 中所有小于 \(k\) 的部分可以直接与 \(k\) 配对
为什么?因为 \(m\) 与更小的配对显然不优,与更大的配对会导致原数组的配对数可能不变 ,可能减一,m轮下来会减m,并不更优

code

#include<bits/stdc++.h>
using namespace std;
#define ll long long

ll a[100005],b[100005];
int main()
{
    ll t;
    cin>>t;

    while(t--)
    {
        ll n,m;
        cin>>n>>m;

        for(ll i=1;i<n;i++) cin>>a[i];
        for(ll i=1;i<=n;i++) cin>>b[i];

        sort(a+1,a+n);
        sort(b+1,b+1+n);
        ll it=1;
        ll cnt=0,maxs=b[n];
        for(ll i=1;i<n;i++)
        {
            while(it<=n&&b[it]<=a[i])
            {
                maxs=b[it];
                it++;
            }
            if(it>n) break;
            cnt++;
            it++;
        }
        //printf("cnt:%d  maxs:%d\n",cnt,maxs);

        ll ans=(n-1LL-cnt)*m;
        if(m>=maxs) ans+=m-maxs+1LL;
        cout<<ans<<endl;
    }
    return 0;
}


posted @   纯粹的  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示