World Tour Finals 2019 D - Distinct Boxes 题解
太神了,专门写一篇题解 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 题解的更多相关文章
- Comet OJ 2019 夏季欢乐赛题解
Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...
- ICPC World Finals 2019 题解
[A]Azulejos 题意简述: 有两排瓷砖,每排都有 \(n\) 个,每个瓷砖有高度 \(h_i\) 和价格 \(p_i\) 两种属性. 你需要分别重新排列这两排瓷砖,使得同一排的瓷砖满足价格不降 ...
- ACM-ICPC World Finals 2019 G.First of Her Name
题意:给一颗字典树,m次查询,每次给出一个字符串,问你该字符串是字典树上多少串的后缀 题解:字典树求广义sam,每次把查询串在sam上跑一遍,最后到达的点的sz就是答案,中途没法走了,就是没有出现过 ...
- 洛谷P5283 & LOJ3048:[十二省联考2019]异或粽子——题解
https://www.luogu.org/problemnew/show/P5283 https://loj.ac/problem/3048 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子 ...
- CF293B Distinct Paths题解
CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...
- kick start 2019 round D T3题解
---恢复内容开始--- 题目大意:共有N个房子,每个房子都有各自的坐标X[i],占据每个房子需要一定花费C[i].现在需要选择K个房子作为仓库,1个房子作为商店(与题目不同,概念一样),由于仓库到房 ...
- kick start 2019 round D T2题解
题目大意:由N个房子围成一个环,G个人分别顺时针/逆时针在房子上走,一共走M分钟,每分钟结束,每个人顺/逆时针走到相邻的房子.对于每个房子都会记录最后时刻到达的人(可能是一群人).最终输出每个人会被几 ...
- 2019.11.11&12题解
Day1 考的不是很好,T1T2没区分度,T3想的太少,考试后期几乎都是在摸鱼,bitset乱搞也不敢打,只拿到了35分,跟前面的差距很大 A. 最大或 标签: 二进制+贪心 题解: 首先x,y中一定 ...
- 2019.11.12&13题解
写在前面: 虽然拿到了rk1,但是T3被卡常TLE90分,(考后再交就A了!?),lemon80,又丢失了一次良好的AK机会, 掐头去尾距离联赛仅剩2天,最近中午一直睡不好,可能是有些紧张, 希望自己 ...
随机推荐
- xpath & csv文件读写
原理:拿到网页源代码并且进行分析 关键词:etree .xpath a[@href="dapao"] a/@href text() impo ...
- python3 Softmax函数
Softmax函数公式 Softmax的作用简单的说就计算一组数值中每个值的占比 import torch import torch.nn.functional as F # 原始数据tensor y ...
- Git在项目中使用技巧
1.常用的命令 mkdir 文件夹名 创建文件夹 clear 清楚屏幕 ls或者ll 将当前目录下的子文件和子目录平铺在控制台 find 目录名 将对应目录下的子孙文件或子孙目录平铺在控制台 rm 文 ...
- 【python疫情可视化】用pyecharts开发全国疫情动态地图,效果酷炫!
一.效果演示 我用python开发了一个动态疫情地图,首先看下效果: 如图所示,地图根据实时数据通过时间线轮播的方式,动态展示数据的变化.随着时间的推移,疫情确诊数量的增多,地图各个省份颜色逐渐加深, ...
- PyScript:让Python在HTML中运行
大家好,我是DD,已经是封闭在家的第51天了! 最近一直在更新Java新特性和IDEA Tips两个专栏,其他方向内容的动态关注少了.昨天天晚上刷推的时候,瞄到了这个神奇的东西,觉得挺cool的,拿出 ...
- 操作系统实现-loader
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 大家好呀,终于我们到了操作系统的loader部分了,loader也是操作系统中最重要的一个 ...
- Windows IDEA Community 报错
运行时报错 "CreateProcess error=206,文件名或扩展名太长" 解决方法:https://plugins.gradle.org/plugin/ua.eshepe ...
- 是时候使用 YAML 来做配置或数据文件了
概述 我们做程序,经常需要用到配置信息,回顾一下这么多年的搬砖生涯,我记得用过多种格式的文件来定义配置信息,例如 ini文件,xml文件,或者现在比较流行的 json 文件. 这些年虽然云计算和云原生 ...
- 强制20天加班开发app后被集体解雇,象寻技术负责人公众号发文怒斥前领导
5月16日下午三点,象寻官方公众号发了一篇<祝象寻早日倒闭的文章>文章,文章配一个竖中指的手势.如此劲爆的文章瞬间引爆了微信朋友圈,大家纷纷分享给好友和微信群,阅读量也达到了十万+. 当时 ...
- 认识并安装WSL
认识并安装WSL(基于Windows的Linux子系统) 什么是WSL WSL(Windows Subsystem for Linux),这是在windows平台运行的linux子系统.也就是说可是不 ...