Kattis - icpccamp ICPC Camp(二分+贪心)
题目链接:点击查看
题目大意:给出两种种类的数字分别 m1m_1m1 和 m2m_2m2 个,现在要求匹配 nnn 个不同种类的数字,每个数字只能使用一次,且两数之和不能超过 sss,输出任意两对数字之差最大值的最小值
题目分析:
首先二分答案将最值问题转换为检验问题。
假如差值确定后,每个数字就会出现一个可匹配的区间,设数字为 xxx,差值为 ddd,则其可以匹配另一种类的数字区间为 [x−d,min(x+d,s−x)][x-d,\min(x+d,s-x)][x−d,min(x+d,s−x)]
于是转换为了区间和数字的最大匹配问题了:POJ - 3614 Sunscreen
用优先队列可以在 O(nlogn)O(nlogn)O(nlogn) 的复杂度内实现,加上二分,所以本题的复杂度为 O(nlog2n)O(nlog^2n)O(nlog2n)
代码:
// Problem: ICPC Camp
// Contest: Virtual Judge - Kattis
// URL: https://vjudge.net/problem/Kattis-icpccamp
// Memory Limit: 1048 MB
// Time Limit: 4000 ms
//
// Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<list>
#include<unordered_map>
#define lowbit(x) (x&-x)
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=1e6+100;
struct Node {int l,r;bool operator<(const Node& t)const {return r>t.r;}
};
int a[N],b[N],n,m1,m2,s;
bool check(int d) {vector<Node>node;for(int i=1;i<=m2;i++) {int l=b[i]-d,r=min(b[i]+d,s-b[i]);node.push_back({l,r});}sort(node.begin(),node.end(),[&](Node a,Node b) {if(a.l!=b.l) {return a.l<b.l;}return a.r<b.r;});int cnt=0,pos=0;priority_queue<Node>q;//右端点大的区间优先级更高for(int i=1;i<=m1;i++) {while(pos<m2&&node[pos].l<=a[i]) {//将左端点小于等于a[i]的区间都压入优先队列候选q.push(node[pos]);pos++;}while(q.size()) {//右端点小于a[i]的区间后面肯定也用不到了,舍弃即可int r=q.top().r;q.pop();if(r>=a[i]) {cnt++;break;}}}return cnt>=n;
}
int main()
{#ifndef ONLINE_JUDGE
// freopen("data.in.txt","r",stdin);
// freopen("data.out.txt","w",stdout);
#endif
// ios::sync_with_stdio(false);read(n),read(m1),read(m2),read(s);for(int i=1;i<=m1;i++) {read(a[i]);}for(int i=1;i<=m2;i++) {read(b[i]);}sort(a+1,a+1+m1);int l=0,r=inf,ans=-1;while(l<=r) {int mid=(l+r)>>1;if(check(mid)) {ans=mid;r=mid-1;} else {l=mid+1;}}cout<<ans<<endl;return 0;
}
Kattis - icpccamp ICPC Camp(二分+贪心)相关推荐
- 蒟蒻的第一篇博客CF1041C Coffee Break(二分+贪心+set)
CF1041C Coffee Break(二分+贪心+set) 描述 Recently Monocarp got a job. His working day lasts exactly mm min ...
- 洛谷P1182 数列分段 Section II(二分+贪心)
题目描述 对于给定的一个长度为N的正整数数列 A1∼NA _{1∼N}A1∼N,现要将其分成 M(M≤N)M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一 ...
- 2019-2020 ICPC, NERC, Southern and Volga Russian Regional Contest J. The Parade(二分+贪心)
题目链接 大意:给你一个组士兵,告诉你身高iii的人数aia_iai,让你放在kkk行,使得每行人数相同且每行中士兵身高差不超过111,问你最多能放多少士兵满足条件. 思路:二分每行人数.证明:如果 ...
- [USACO16JAN]Angry Cows S[二分+贪心]
题意:Bessie 设计了一款新游戏:Angry Cows.在这个游戏中,玩家发射奶牛,每头奶牛落地时引爆一定范围内的干草.游戏的目标是使用一组奶牛引爆所有干草. N 捆干草排列在数轴上的不同位置.第 ...
- BZOJ2525 [Poi2011]Dynamite 【二分 + 贪心】
题目链接 BZOJ2525 题解 就是要求所有有炸弹的点到点燃点距离最大值最小 显然二分答案距离\(D\) 然后按深度排序,贪心点燃当前没覆盖的深度最深的点往上第\(D\)层的点 每覆盖一个点要标记其 ...
- hdu5248序列变换(二分+贪心)基础题
题意(中文的直接粘题意吧) ...
- 外卖(food) 洛谷4040宅男计划 三分套二分贪心
food评测传送门 [题目描述] 叫外卖是一个技术活,宅男宅女们一直面对着一个很大的矛盾,如何以有限的金钱在宿舍宅得尽量久. 外卖店一共有 N 种食物,每种食物有固定的价钱 Pi 与保质期 S ...
- LA 4254 Processor 处理器 【二分 贪心 优先队列】
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21663 二分: 最大值最小的问题通过二分来求解.对处理器速度进行 ...
- hdu 5248(二分+贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5248 解题思路:这道题我原本的思路是动态规划,结果看到数很大,结果放弃了.然后想到二分,思路是对的,只 ...
最新文章
- c global 拦截 ajax,@RestControllerAdvice 全局拦截异常(示例代码)
- a55 matlab排列组合_matlab常用的排列组合
- php 客户端上传图片,php上传图片客户端和服务器端实现方法
- 排序中减治法算法伪代码_算法浅谈——分治算法与归并、快速排序(附代码和动图演示)...
- ssh本地端口转发,远程端口转发,隧道(这个解释不饶)
- 38动感菜单 38 jQuery And CSS Drop Down Multi Level Menu Solutions
- 数据建模-聚类分析-K-Means算法
- python的标志为什么是蛇_Python 为什么推荐蛇形命名法原因浅析
- UVA 11452 Dancing the Cheeky-Cheeky
- 2.2 获取图像感兴趣区域_超火的机器视觉OpenCVSharp学习笔记3——图像形态学处理...
- html组合标题,如何组合标题关键词(影响标题的5个因素)
- Android简易聊天室软件(HTTP实现)
- GMQ钱包积极打造并维护区块链健康生态的发展
- ligerui父页面向子页面传值
- 微信做音乐相册html5,js微信应用场景之微信音乐相册案例分享
- 在线TSV转CSV工具
- 一个站长找回域名的艰辛之路
- 如何ssh连接本地的虚拟机
- 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/06/28
- 武汉申报|市重点研发计划重点项目申报进行中