CF309E 题解
11:30,过题。12:50,忘记做法。
吃饭时不该看未来日记的,Ynoj 害人不浅(确信)。
以上为个人吐槽。
题目大意
不知道题目翻译是个啥。。。但讨论区有大佬给出了精确的翻译。我改得符合题目背景一点放上来:
每一个羊有一个区间 \(l_i,r_i\) ,如果两只羊区间相交,我们称为两只羊“捆在一起”
现在,你需要重新排列 \(n\) 只羊,使“捆在一起”的羊之间的最大距离最小,输出方案
距离定义为两只羊中间的羊的数量(其实无所谓了,毕竟只要输出方案)
提示:注意一只羊可以和多只羊捆在一起。
做法
二分加贪心。
二分答案,问题变成了保证两个相交的羊之间距离不超过二分的答案 mid 。
不妨从小到大选择这个位置应该放哪一只羊,那么我们可以维护出一个数组 fin ,表示每只羊当前最远能放到的位置是哪里。
首先判断无解情况。设当前选择到了序列的位置 i ,我们统计出数组 finc,finc[j] 表示 fin 数组值在从 i 到 j 的羊的个数
显然,无解的情况就是 \(finc[j] > j-i+1\) 。证明:根据 fin 的定义,每次选择后,限制变多,fin 不会变大。如果大于,就不能将 fin 在 i~j 之间的羊塞进 \(j-i+1\) 个位置中。
然后我们考虑这个位置放哪只羊。根据无解情况,我们发现了一个限制:如果 \(finc[j]=j-i\) ,那么我们放的羊肯定要小于等于 j 。不然放下一只羊时必定会导致无解情况( finc可能会增加,\(j-i\) 必定会减小)。而我们只需要满足 j 最小的限制就行了。原因是满足了以后之后的 finc 都会减一,避免了上面的情况。
满足上面的限制后,我们贪心地选取 r 最小的羊。因为我们要尽量避免相交,如果一开始就选取大的 r ,之后的相交数只会吧变多不会变少。
最后一个步骤,选择完点后,我们要根据这个点更新之后羊的 fin 。具体地,我们要保证与之相交的点最远放到的位置小于等于 \(i+mid\) 。
也许我讲的不够清楚,我再把 check 的总过程放上来:
inline bool check(int mid)
{
for(int i = 1;i <= n;i ++) fin[i] = n, ans[i] = 0, fl[i] = 0;
for(int i = 1;i <= n;i ++)
{
int b = 0, p = 0;
memset(finc, 0, sizeof(finc));
for(int j = 1;j <= n;j ++) if(!fl[j]) finc[fin[j]] ++;//统计 fin 为 j 的羊的只数
for(int j = 1;j <= n;j ++) finc[j] += finc[j - 1]; //实际上 finc 就是求一遍前缀和
for(int j = i;j <= n;j ++) if(finc[j] > j - i + 1) return 0;//判无解(被标记的点统计 finc 时就没有贡献,无需额外判断)
for(int j = n;j >= i;j --) if(finc[j] == j - i + 1) b = j;//寻找最小的限制
for(int j = 1;j <= n;j ++) if(!fl[j] && fin[j] <= b && r[j] < r[p]) p = j;//在限制内寻找最小的 r
fl[ans[i] = p] = 1;//标记,之后不能再选
for(int j = 1;j <= n;j ++) if(l[j] <= r[p] && l[p] <= r[j]) fin[j] = min(fin[j], i + mid);//更新fin
}
return 1;
}
为了方便判断,我在主函数中将 \(r[0] = INF\)。需要注意一下
后记
其实,我们判断无解时用了一个叫做霍尔定理的东西。但由于太过显然,我就直接证了一遍。有兴趣的同学可以自行了解。
CF309E 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- 射频识别技术(RFID)
概述: 无线射频识别即射频识别技术(Radio Frequency Identification,RFID),是自动识别技术的一种,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对记录媒体( ...
- 【BOOK】正则表达式
正则表达式 1. 开源中国-正则表达式测试工具:https://tool.oschina.net/regex/ 2. 匹配规则 3. match() 从字符串起始位置匹配正则表达式 若从起始位置匹配不 ...
- flutter TextField 高度问题(包括使用maxlines自适应高度以及改变textfield组件自定义高度)
先上代码. Container( color: Colors.blue, constraints: BoxConstraints( minHeight: 10, maxHeight: 20 ), ch ...
- oracle SDO_ORDINATE_ARRAY直接展示
mdsys.sdo_geometry 中SDO_ORDINATE存储的是空间对象的几何节点坐标序列,要想直接展示第一条值出来需要捞出数据 若select t.id,t.shape.sdo_ordina ...
- AVD文件转移到非系统盘
AVD文件默认是生成在C:\Users\用户名\.android\avd目录下面的,而AVD文件非常大,可以用下面的方法将AVD文件转移到其他盘中. 1. 将每个模拟器对应的***.avd文件夹的内容 ...
- C++调用Python_____用Python C API
项目需要用C++来处理用python处理的数据集,所以就需要在C++中调用python. 先介绍第一种方法,python文档中给出了python c api,可以实现C++与python的互动. 先新 ...
- 机制设计原理与应用(三)Screening
目录 3 Screening 3.1 为单个不可分割的项目定价 3.1.1 对\(\theta\)的假设 3.1.2 问题描述 3.1.3 特性 3.2 为无限可分的项目定价 3.2.1 对\(\th ...
- Navicat15激活
1.下载Navicat for MySQL 15 https://www.navicat.com.cn/download/navicat-for-mysql 2.下载激活工具 注意:因某些限制,下载链 ...
- vscode 一些扩展的推荐(前端)
- `Auto Rename Tag`:成对修改 HTML 标签名 - `Bracket Pair Colorizer`:括号匹配高亮 - `Color Highlight`:显示颜色代码的颜色 - ...
- 【机器学习】搞清楚机器学习的TP、FN、FP、TN,查全率和查准率,PR曲线和ROC曲线的含义与关系
最近重新学习了一下机器学习的一些基础知识,这里对性能度量涉及到的各种值与图像做一个总结. 西瓜书里的这一部分讲的比较快,这些概念个人感觉非常绕,推敲了半天才搞清楚. 这些概念分别是:TP.FN.FP. ...