P7305 [COCI2018-2019#1] Cipele
[COCI2018-2019#1] Cipele
独立完成。
二分答案典题。
因为具有“最大值最小”这样明显的提示性词语,很容易想到二分答案,也就是二分丑陋度。
我们二分的丑陋度 ,就是对于这个序列来说,他的丑陋度的最大值不可以超过这个 ,看能不能成功。
我们先对这两个序列排序,然后对于 ,找到第一符合条件的数 ,因为序列是有序的,后面的 必然比现在的 大,所以和 以前的数做差也一定不会符合条件。因为 和他们做差已经不符合了,往后这个差值只会更大。所以下一次直接从 开始寻找就好了,时间为 。
最后注意我们默认要从数量少的那个序列在数量多的序列里面找。
#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
#define int long long
int b[N],a[N],n,m;
bool check(int x){
int p=1;
for(int i=1;i<=n;i++){
if(p>m) return false;
while(abs(a[i]-b[p])>x){
if(i<n&&p>m) return false;
p++;
}
if(p>m) return false;
p++;
}
return true;
}
void Find(){
int l=0,r=1e10;
while(l<r){
int mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<r<<endl;
return ;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++) cin>>b[i];
if(n>m){
for(int i=1;i<=n;i++) swap(a[i],b[i]);
swap(n,m);
}
sort(a+1,a+n+1),sort(b+1,b+m+1);
Find();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现