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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~