CodesForces830A Round #424 Div1A:二分+二部图匹配或者三分乱搞

题意:给出一条直线(1-1e9),直线上有n(<=1000)个人,分别站在peo[i]的位置上,有k(<=2000)个钥匙,分别位于ke[i]的位置上,还有一个办公室位于p。

要求每个人任意拿一把钥匙,并且走到办公室位置,每个钥匙只能被一个人拿走,拿钥匙不花费时间,走一单位长度花费1s时间,求所有人都到达办公室的最短时间。

题解1:所有人都到达办公室的时间=所有人里边到达办公室最耗时的那个人,那么这个题变成了最大值最小,典型的二分题,现在的问题是给定一个maxTime,想一种办法检验是否所有的n个人都可以在小于等于maxTIme的时间内拿走钥匙并到达办公室。其实这是一个匹配问题,把人和钥匙分成两部分图。每个人把所有的钥匙的时间算出来(包括最后走到办公室的时间),然后如果这个时间小于maxTime,就连一条边(边权=1),算这个图的最大匹配等于n就说明可行。这部分代码等后边补出来。

题解2:显然如果把人排序,把钥匙排序,每个人要得到一把钥匙,并且走到办公室,钥匙的分布一定是连续的,可以通过假定n-1把钥匙连续分布,另外一把钥匙单列,那么一定不如n个都连续来的优。可以通过暴力的枚举第一个人拿那个钥匙,也就是nk的复杂度得到答案。另外这个题满足三分性质,可以类比一下之前有个SnakeDown的题目,连接在下边。

Code1:

现在没有

Code2:

#include<bits/stdc+&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值