B. Charming Meals
HINT 1:
给定升序数组
对所有 都成立- 最大化
请问该如何排列?
答案是就让
HINT 2:
假设我们已知最优配对和最优值
- 对于小配对,为了最优,一定是最小的
个 去配对最大的 个 - 对于大配对,为了最优,一定是最大的
个 去配对最小的 个
题解
根据上述提示,我们遍历所有的
code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[5005], b[5005];
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
ll t;
cin >> t;
while (t--)
{
ll n;
cin >> n;
for (ll i = 1; i <= n; i++) cin >> a[i];
for (ll i = 1; i <= n; i++) cin >> b[i];
sort(a + 1, a + 1 + n);
sort(b + 1, b + 1 + n);
ll ans = 0;
for (ll len = 0; len <= n; len++) // 有len个小配对
{
ll flag = 1;
ll val = 2e15;
for (ll i = 1; i <= len; i++)
{
if (a[i] > b[n - len + i]) flag = 0;
else val = min(val, b[n - len + i] - a[i]);
}
for (ll i = 1; i <= n - len; i++)
{
if (b[i] > a[i + len]) flag = 0;
else val = min(val, a[i + len] - b[i]);
}
if (flag) ans = max(ans, val);
}
cout << ans << '\n';
}
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步