【清华集训】小Y和地铁
图已挂,前往luogu
题目:
小 $\rm Y$ 是一个爱好旅行的 $\rm OIer$。一天,她来到了一个新的城市。由于不熟悉那里的交通系统,她选择了坐地铁。
她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有换乘站
。通过调查得知,没有线路是环线,也没有线路与自身相交。任意两条不同的线路只会在若干个点上相交,没有重合的部分,且没有三线共点的情况。即,如图所示的情况都是不存在的:

小 $\rm Y$ 坐着地铁 $0$ 号线,路上依次经过了 $n$ 个换乘站。她记下了每个换乘站可以换乘的线路编号,发现每条线路与她所乘坐的线路最多只有 $2$ 个换乘站。现在小 $\rm Y$ 想知道,除掉她经过的换乘站以外,这个城市里最少有几个换乘站。只有你告诉她正确的答案,她才会答应下次带你去玩呢。
$n\le 44$
分析:
首先,我们先考虑最暴力的方法:
我们发现,对于两个换乘站,共有$8$种情况:








考虑我们对每组换乘站进行枚举,再加上$O(n)$的暴力找交点数,时间复杂度为$O(n8^\left(\frac{n}{2}\right))$,面对$n\le 44$的数据,显然会$\rm TLE$。
期望得分$\rm 10$。
考虑寻找这$8$种情况有没有重复。
我们发现,对于第一行的两种情况,放到一起,会是这样的:

对于这种情况,由于这两条线产生了一个完全包住$0$号线的环,我们发现对于每一个其他的线,要么不和这两条线产生交点,要么对这两条线每条都产生一个交点。
所以,不管朝左还是朝右,结果都是一样的,我们只需要枚举朝上或朝下即可。
时间复杂度$O(n4^\left(\frac{n}{2}\right))$,期望得分$40$分。




再考虑,能不能继续减少情况数。
比如,我们把第一列的两种放到一起。

这张图也构成了环,但是这个环并没有能把0号线包住,但是这个环把0号线右边的所有点包住了,也就是在第一个红点右边的所有点是不会受到这两个的选择的影响的。
然后再来看第一个红点左边的情况,如果你是按左端点从左往右搜索的,你会发现到这步的时候红点左边已经搜索完了,即在左边会进出环的点已经全部决定了,而又因为不会对右边造成影响,所以我们可以贪心地取这两条环产生交点的最小值。
同理,剩下的也可以这样处理。
时间复杂度$O(n2^\left(\frac{n}{2}\right))$。
期望得分$\rm 80$分。
搜索的时间复杂度看上去已经很优了,所以我们考虑能不能优化找交点的时间复杂度。
考虑我们从左往搜索,用$a.l,a.r$表示$a$线路的左端点右端点,若只考虑同向,因为$a.l \lt a.r,\;b.l \lt b.r,\; a.l \lt b.l$则有三种情况:
$$1)\quad a.l\lt b.l\lt b.r \lt a.r$$
$$2)\quad a.l\lt a.r\lt b.l \lt b.r$$
$$3)\quad a.l\lt b.l \lt a.r \lt b.r$$
显然,只有情况$3$是相交的。

我们发现只有$b.l\lt a.r\lt b.r$我们才需要统计。
是不是很熟悉?你可以使用树状数组来进行统计。
每个右端点标记$1$,然后求$[b.l,b.r]$的和即可。
对于朝向问题,显然左端点的朝向不影响,右端点只有同向才会相交,可以自行画图,这边不作演示。
至于代码,由于写的时候比较早,太丑就不放出来了。
时间复杂度$O(2^{\left(\frac{n}{2}\right)}\log n)$,可以$\rm AC$。
有问题请留言。
后记:
$\rm hyc\;dalao$说这题是$\rm dfs$模板题,实在太强了。
【清华集训】小Y和地铁的更多相关文章
- [清华集训]小 Y 和恐怖的奴隶主
题面在这里 题意 有一个\(Boss\)和他血量为\(m\)的随从奴隶主,每当奴隶主受到攻击且不死,并且\(Boss\)的随从个数\(<k\)时,就会新召唤一个血量为\(m\)的奴隶主.每次攻击 ...
- [LOJ#2323]「清华集训 2017」小Y和地铁
[LOJ#2323]「清华集训 2017」小Y和地铁 试题描述 小Y是一个爱好旅行的OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的 ...
- 【清华集训 2017】小Y的地铁 [模拟退火]
小Y的地铁 Time Limit: 50 Sec Memory Limit: 256 MB Description Input Output 对于每组输入数据,输出一行一个整数,表示除掉这 n 个换 ...
- 【洛谷4005】小Y和地铁(搜索)
[洛谷4005]小Y和地铁(搜索) 题面 洛谷 有点长. 题解 首先对于需要被链接的两个点,样例中间基本上把所有的情况都给出来了. 但是还缺了一种从下面绕道左边在从整个上面跨过去在从右边绕到下面来的情 ...
- 【luogu P4005 清华集训2017】小Y和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- P4005 小 Y 和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- [清华集训2017]小 Y 和地铁(神奇思路,搜索,剪枝,树状数组)
世界上最不缺的就是好题. 首先考虑暴搜.(还有什么题是从这东西推到正解的……) 首先单独一个换乘站明显没用,只用考虑一对对的换乘站. 那么有八种情况:(从题解偷图) 然后大力枚举每个换 ...
- LOJ2323. 「清华集训 2017」小 Y 和地铁 【搜索】【思维】【好】
LINK 思路 首先如果直接算每一个段有三个决策 左/右 上/下 跨不跨过端点 这样的复杂度是\((2^3)^{22}\),显然是无法接受的 然后考虑怎么优化这个东西 首先左右这个决策是没有意义的 因 ...
- 清华集训2017D2T1 小 Y 和地铁(metro)
题目:https://www.luogu.org/problem/show?pid=P4005 题意:一条线段,给定n个点(n<=44)其中每个点可能对应另外一个点.如果一个点有对应点,那么就要 ...
随机推荐
- PL/SQL中模拟EBS上下文
有时,我们需要查询的表或视图,是具有OU屏蔽的,这时我们就需要模拟EBS中的上下文来实现查询数据. BEGIN fnd_global.apps_initialize(user_id =>1,re ...
- Android 桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果
首先是一个小的悬浮窗显示的是当前使用了百分之多少的内存,点击一下小悬浮窗,就会弹出一个大的悬浮窗,可以一键加速.好,我们现在就来模拟实现一下类似的效果. 先谈一下基本的实现原理,这种桌面悬浮窗的效果很 ...
- UML中类图(Class Diagram)的关系整理
什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...
- Mvc重写JsonResult
用了mvc有一段时间了,慢慢的熟悉起来了,也渐渐的发现了mvc的一些缺点,比如当我们返回 Json(new{})的时候没办法做到将首字母转换成小写.日期再序列化过后是时间戳需要到前台重新处理或者提在在 ...
- Head First Python 读书笔记
记录一下这段时间看<Head First Python>记录的一些小知识,只是记了很少一部分,有需要的话以后再添加吧. for循环的使用: for 目标标识符 in 列表: 处理代码 if ...
- Android(java)学习笔记95:Android运行时异常"Binary XML file line # : Error inflating class"
在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常:"Binary XML file line # : Error inflating class&q ...
- Oracle 数字处理函数
数字处理函数 ① mod(number1,number2) 取余数的函数,比如mod(10,3) = 10/3 = 1. ② round(number,num_ditigs) .trunk(numbe ...
- STL笔记(こ)--删除数组中重复元素
使用STL中的Unique函数: #include<bits/stdc++.h> using namespace std; void fun(int &n) //配套for_eac ...
- bat 服务启动脚本
当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用 ...
- css分层,实现遮罩底层弹出新窗口里可以操作,最下层能看到单不能操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...