太神了,专门写一篇题解 qwq

简要题意:给你 \(R\) 个红球和 \(B\) 个蓝球,你要把它们放到 \(K\) 个箱子里,要求没有两个箱子完全相同(即两种球个数就相同),求 \(K\) 的最大值。

设第 \(i\) 个箱子中有 \(x_i\) 个红球,\(y_i\) 个蓝球,就变成了找平面上一个大小最大的点集 \((x_i,y_i)\),使 \(\sum x_i =R, \sum y_i=B\)。进一步,由于可以直接将 \(x\) 最大的点 \(x\) 坐标变大,\(y\) 同理,因此只需有 \(\sum x_i \le R, \sum y_i \le B\) 即可。

这是一道二维平面上的题,我们可以想办法把它变成一维。给 \(x\) 方向赋一个权重 \(p\),\(y\) 方向赋一个权重 \(q\),那么一个点 \((x,y)\) 就被投影到了 \(px+qy\) 上。此时我们发现所有点投影后的权重和为 \(\sum px_i+qy_i=p\sum x_i+q\sum y_i\),于是当 \(\sum x_i \le R, \sum y_i \le B\) 时,便有 \(\sum px_i+qy_i\le pR+qB\)。在某种程度上,我们就会希望 \(\sum px_i+qy_i\) 尽量小。

首先当然二分 \(K\),问题变为判定一个 \(K\) 是否可行。然后我们考虑一个凸包,凸包上的点 \((X,Y)\) 代表 \(\sum x_i=X\) 时,\(\sum y_i\) 的最小值为 \(Y\)。感性理解一下这玩意大概就是凸的,并且对每个 \(X\) 都有定义。于是 \(K\) 可行当且仅当点 \((R,B)\) 在凸包上方。又发现对于一个 \((p,q)\),使 \(p\sum x_i+q\sum y_i\) 最小时,\((\sum x_i,\sum y_i)\) 一定在凸包上,于是我们尝试用 \((p,q)\) 搞出凸包上的一些点。

继续发现 \(p\sum x_i+q\sum y_i=(p,q)\cdot (\sum x_i,\sum y_i)\),即向量 \((x_i,y_i)\) 在向量 \((p,q)\) 上的投影。\(p\sum x_i+q\sum y_i\) 最小,就是这个投影最小,可以看作拿一条与向量 \((p,q)\) 垂直的直线去切这个凸包,所以每个点都一定有机会被切到,且 \((p,q)\) 的斜率越大,切到的点越偏右。于是再对 \((p,q)\) 的斜率进行二分,如果发现求出来的点 \((\sum x_i,\sum y_i)\) 在 \((R,B)\) 左下方,那就成了;如果在 \((R,B)\) 右上方,那就寄了;如果在左上方,那就增大斜率;如果在右下方,那就减小斜率。

这里有两个技巧:1,不要在实数域上二分 \((p,q)\) 的斜率,令 \(p+q=10^9+7\)(或其它常数),然后直接二分 \(p\),可以发现这样基本上能覆盖到所有的斜率都能被弄到,从而能切到每个点。2,由于凸包上相邻两条线段斜率可能非常相近,因此我们要当发现当前凸包上一条连线在 \((R,B)\) 下方时直接返回合法。

最后的问题是如何计算对于一个 \((p,q)\) 计算 \(p\sum x_i+q\sum y_i\) 的最小值。我们二分一个 \(z\),求出 \(p\sum x_i+q\sum y_i\le z\) 的个数进行二分。然后求出 \(p\sum x_i+q\sum y_i\le z\) 的 \(x,y\) 分别的和以及多余的一些 \(p\sum x_i+q\sum y_i=z+1\) 的前若干个 \(x,y\) 的和。以上操作全部用类欧做就是一个 \(\log\),或者发现如果我们选了一个点 \((x,y)\),那么它左下角的所有点都一定已经被选了,所以有 \(\min(x,y)\le O(W^{1\over 3})\)(\(W\) 为值域),二维分别枚举即可。

一共三个二分,最后一步用类欧时间复杂度就 \(O(\log^4 W)\),直接枚举复杂度就 \(O(W^{1\over 3}\log^3 W)\)。

World Tour Finals 2019 D - Distinct Boxes 题解的更多相关文章

  1. Comet OJ 2019 夏季欢乐赛题解

    Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...

  2. ICPC World Finals 2019 题解

    [A]Azulejos 题意简述: 有两排瓷砖,每排都有 \(n\) 个,每个瓷砖有高度 \(h_i\) 和价格 \(p_i\) 两种属性. 你需要分别重新排列这两排瓷砖,使得同一排的瓷砖满足价格不降 ...

  3. ACM-ICPC World Finals 2019 G.First of Her Name

    题意:给一颗字典树,m次查询,每次给出一个字符串,问你该字符串是字典树上多少串的后缀 题解:字典树求广义sam,每次把查询串在sam上跑一遍,最后到达的点的sz就是答案,中途没法走了,就是没有出现过 ...

  4. 洛谷P5283 & LOJ3048:[十二省联考2019]异或粽子——题解

    https://www.luogu.org/problemnew/show/P5283 https://loj.ac/problem/3048 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子 ...

  5. CF293B Distinct Paths题解

    CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...

  6. kick start 2019 round D T3题解

    ---恢复内容开始--- 题目大意:共有N个房子,每个房子都有各自的坐标X[i],占据每个房子需要一定花费C[i].现在需要选择K个房子作为仓库,1个房子作为商店(与题目不同,概念一样),由于仓库到房 ...

  7. kick start 2019 round D T2题解

    题目大意:由N个房子围成一个环,G个人分别顺时针/逆时针在房子上走,一共走M分钟,每分钟结束,每个人顺/逆时针走到相邻的房子.对于每个房子都会记录最后时刻到达的人(可能是一群人).最终输出每个人会被几 ...

  8. 2019.11.11&12题解

    Day1 考的不是很好,T1T2没区分度,T3想的太少,考试后期几乎都是在摸鱼,bitset乱搞也不敢打,只拿到了35分,跟前面的差距很大 A. 最大或 标签: 二进制+贪心 题解: 首先x,y中一定 ...

  9. 2019.11.12&13题解

    写在前面: 虽然拿到了rk1,但是T3被卡常TLE90分,(考后再交就A了!?),lemon80,又丢失了一次良好的AK机会, 掐头去尾距离联赛仅剩2天,最近中午一直睡不好,可能是有些紧张, 希望自己 ...

随机推荐

  1. 使用 Vert.X Future/Promise 编写异步代码

    Future 和 Promise 是 Vert.X 4.0中的重要角色,贯穿了整个 Vert.X 框架.掌握 Future/Promise 的用法,是用好 Vert.X.编写高质量异步代码的基础.本文 ...

  2. 全网显示 IP 归属地,这背后的技术你知道吗?

    为了进一步规范国内的网络舆论,国家规定了各互联网平台都需要显示 IP 归属地信息.微博.抖音.公众号等多个平台纷纷上线了 IP 归属地功能,这标志着国内言论的进一步规范化.但互联网平台商们是怎么通过 ...

  3. 如何使用Docker构建前端项目

    原文链接 Docker单独部署前端项目和Node项目是非常便捷的,在这里分享一下Docker的使用,主要聊聊它的部署实践.(我是window10专业版安装Docker) Docker Docker是一 ...

  4. 【FAQ】申请华为运动健康服务授权的4个常见问题及解决方法

    华为运动健康服务(HUAWEI Health Kit)提供原子化数据开放,在获取用户对数据的授权后,应用可通过接口访问运动健康数据,对用户数据进行增.删.改.查等操作,为用户提供运动健康类数据服务.这 ...

  5. 【多线程】守护线程 Daemon

    守护线程 Daemon 线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 如,后台记录操作日志,监控内存,垃圾回收等待.. 代码示例: /** * @Desc ...

  6. 好客租房44-react组件基础综合案例-5发表评论-1

    发表评论 1给按钮绑定点击事件 2在事件处理程序中 通过state获取评论信息 3将评论信息添加到state中 并调用setState()方法更新数据 //导入react import React f ...

  7. 143_Power BI&Power Pivot月度、季度、半年度、全年同维度展示

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近在做下一年度的预算,做出来需要月度.季度.半年度.全年都展示出来,在做测算的是时候,默认的透视表已经无法满足 ...

  8. Javabean使用实例

    1.login.jsp <%@ page language="java" contentType="text/html; charset=utf-8" p ...

  9. Spark: 单词计数(Word Count)的MapReduce实现(Java/Python)

    1 导引 我们在博客<Hadoop: 单词计数(Word Count)的MapReduce实现 >中学习了如何用Hadoop-MapReduce实现单词计数,现在我们来看如何用Spark来 ...

  10. Kafka 消费者解析

    一.消费者相关概念 1.1 消费组&消费者 消费者: 消费者从订阅的主题消费消息,消费消息的偏移量保存在Kafka的名字是__consumer_offsets的主题中 消费者还可以将⾃⼰的偏移 ...