首页 > 其他分享 >C240817C. 团队协作:二分答案+贪心

C240817C. 团队协作:二分答案+贪心

时间:2024-08-17 15:48:37浏览次数:8  
标签:二分 匹配 int C240817C mid 贪心

C240817C. 团队协作

二分显然,但是被check难住了。

以为只能把运动员按速度分成两类,然后二分图找最大匹配,但显然做不动。

然后考场上就被卡住了………

看了题解突然勾起了对一道题远古的记忆:总之也是二分之后是要看能不能全匹配上。

然后当时用的就是sort之后贪心,发现这个贪心很对,恍然大悟。

\(A\) 里面第一小的就应该匹配 \(B\) 里面第一个比它大的,匹配后面的,那再匹配 \(A\) 后面的数就不优了。

多做题就好了。

#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
#define int ll
using namespace std;
using ll = long long;
const int N=1e5+55;
vector<int> A,B;
int n;
int v[N],w[N];
inline bool check(int lim){
	A.clear();
	B.clear();
	F(i,1,n){
		if(v[i] < lim)	A.emplace_back(w[i]);
		else B.emplace_back(v[i] + w[i] - lim);
	}
	sort(A.begin(),A.end());
	sort(B.begin(),B.end());
	int u = 0, sz = A.size();
	for(auto x:B){
		if(u<sz && A[u]<= x) ++u;
	}
	return u>=sz;
}
signed main(){
//	freopen("team.in","r",stdin); 
//	freopen("team.out","w",stdout);
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin>>n;
	F(i,1,n) cin>>v[i]>>w[i];
	int l=0,r=1e9+1,mid;
	while(l+1<r){
		mid=(l+r)>>1;
		if(check(mid)) l=mid;
		else r=mid;
	}
	cout<<l<<"\n";
	return 0;
}
/*		
	T
	n,m,k,st
	u,v,w
	think twice, code once.
	check your code:
	array memory
	testing sentence 
*/

标签:二分,匹配,int,C240817C,mid,贪心
From: https://www.cnblogs.com/superl61/p/18364511

相关文章

  • 贪心-多机调度问题
    多机调度问题分析问题描述在多机调度问题中,我们有n个独立的作业和m个相同的机器。每个作业i需要处理时间ti。我们的目标是找到一个调度方案,使得所有作业尽可能快地完成。贪心策略最长处理时间优先:优先分配处理时间最长的作业到最先可用的机器上。情况分类A:n......
  • 二分(通俗易懂)
    二分查找整数二分先决条件:数据一定有序下面是模版,只需要记住,然后套用即可//查找左边界SearchLeft简写SLintSL(intl,intr){while(l<r){intmid=(l+r)>>1;if(check(mid))r=mid;elsel=mid+1;}re......
  • C语言学习 --- 冒泡排序与二分查找
    冒泡排序 排序        从小到大顺序排 轮数        数据个数-1 每一次比较的次数      数据个数-1-当前的轮数      每次比较开始从下标为0的地方开始比较     轮数:0~<数据个数-1次数:0~<数......
  • 反悔贪心 & 模拟费用流
    反悔贪心&模拟费用流参考资料来源cyt前言很多找到一种可行的方案,匹配(选择)某些东西,使价值最优化的问题可以建出费用流模型。但是直接跑费用流的复杂度是不对的。我们又想到可以用简单的贪心思路解决这些问题,然而一般的贪心都假掉了。于是我们考虑模拟费用流的退流操作来做......
  • Day31 贪心算法part5
    目录任务56.合并区间思路738.单调递增的数字思路968.监控二叉树思路任务56.合并区间以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。思路......
  • D44 2-SAT+前缀优化+二分 CF587D Duff in Mafia
    视频链接: CF587DDuffinMafia-洛谷|计算机科学教育新生态(luogu.com.cn)#include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=500005;inthead[N],idx,ne[N*6],to[N*6];voidadd(intx,......
  • 代码随想录算法训练营第一天 | 704. 二分查找,27. 移除元素
     704.二分查找题目链接:https://leetcode.cn/problems/binary-search/1,左闭右闭publicintsearch(int[]nums,inttarget){intlow=0;inthigh=nums.length-1;while(low<=high){intmid=(high+low)/2;if(num......
  • Day30 贪心算法part4
    目录任务452.用最少数量的箭引爆气球思路435.无重叠区间思路763.划分字母区间思路任务452.用最少数量的箭引爆气球有一些球形气球贴在一堵用XY平面表示的墙面上。墙面上的气球记录在整数数组points,其中points[i]=[xstart,xend]表示水平直径在xstart和xend之间的......
  • 二分图最大匹配(匈牙利算法)
    二分图最大匹配(匈牙利算法)算法思路寻找增广路即一条以选中边开始,以选中边结束的路,它有一个重要的性质:选中边比未选中边多一.只需要不断贪心的找增广路,直到不存在为止具体实现以dfs(深度优先)为例1.从左部1号开始搜寻增广路2.令当前点编号为x遍历右部与x相连的点3.若当前......
  • 【代码随想录】一、数组:1.二分查找
    部分图文参考于:代码随想录-二分查找,本文仅作为个人学习使用,如有侵权,请联系删除。1.概念二分查找也称折半查找(BinarySearch),是一种在有序数组中查找某一特定元素的搜索算法。我们可以从定义可知,运用二分搜索的前提是数组必须是有序的,这里需要注意的是,我们的输入不一定是数组,也......