专栏文章

P14055 [POI 2015 R3] 路标 Direction signs 题解

P14055题解参与者 3已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@min58buq
此快照首次捕获于
2025/12/01 20:46
3 个月前
此快照最后确认于
2025/12/01 20:46
3 个月前
查看原文
题目基本信息
考察:拓扑排序,bitset(省选/NOI-)。
题目简介:
nn 个路牌和 mm 个城市,它们都位于实数坐标,其中每一个路牌都在任意一个城市的左侧,现在对于第 ii 个路牌第 jj 座城市给定它们距离的下取整值 di,jd_{i,j}(但不一定正确),问你能选出最多多少的路牌使得路牌到城市的距离下取整值不矛盾,并构造一种方案,方案中路牌按你钦定的实数坐标(只要不与所给信息矛盾)从小到大输出。
数据范围:
  • 1n10001\le n\le 1000
  • 1m2001\le m\le 200
  • i[1,n],j[1,m],1di,j106\forall i\in[1,n],j\in[1,m],1\le d_{i,j}\le 10^6
  • 保证最多能选出的路牌数量不低于 n5\dfrac{n}{5}
保证最多能选出的路牌数量不低于 n5\dfrac{n}{5} 这一条件引导我们考虑先随机一个 uu 并钦定它在最终的构造方案中(错误率有 45\dfrac{4}{5},为方便估计正确率我们可以将随机三次都错误的概率近似成 12\dfrac{1}{2})这样我们随机 Θ(1)\Theta(1) 次就有很大概率随机到正确答案。
Δdi,j\Delta d_{i,j} 表示实际未下取整与 di,jd_{i,j} 的值的差(容易得到 Δdi,j[0,1)\Delta d_{i,j}\in[0,1)),同时设 xix_i 表示路标 ii 的坐标,yjy_j 表示城市 jj 的坐标, 我们容易得到:
yjxiΔdi,j=di,jy_j-x_i-\Delta d_{i,j}=d_{i,j} 这个式子中 yjy_jxix_i 的范围我们是一点也不知道,所以我们考虑消元消去它们。
由于 uu 的这个式子我们钦定已经成立,所以我们考虑令 ii 所对应的式子和 uu 所对应的式子相减得到:
ai,j=di,jdu,j=(yjxiΔdi,j)(yjxuΔdu,j)=xu+Δdu,jxiΔdi,j\begin{aligned}a_{i,j}&=d_{i,j}-d_{u,j}\\&=(y_j-x_i-\Delta d_{i,j})-(y_j-x_u-\Delta d_{u,j})\\&=x_u+\Delta d_{u,j}-x_i-\Delta d_{i,j}\end{aligned} 我们观察到我们只需要再找到另一个 ai,j2a_{i,j_2} 与其相减即可,为了令其计算出的都不是负数所以我们找到该值最小的 idxiidx_i 与其相减得到:
bi,j=ai,jai,idxi=(xu+Δdu,jxiΔdi,j)(xu+Δdu,idxixiΔdi,idxi)=Δdu,j+Δdi,idxiΔdi,jΔdu,idxi\begin{aligned}b_{i,j}&=a_{i,j}-a_{i,idx_i}\\&=(x_u+\Delta d_{u,j}-x_i-\Delta d_{i,j})-(x_u+\Delta d_{u,idx_i}-x_i-\Delta d_{i,idx_i})\\&=\Delta d_{u,j}+\Delta d_{i,idx_i}-\Delta d_{i,j}-\Delta d_{u,idx_i}\end{aligned} 那么 bi,jb_{i,j} 的值域是多少呢?
因为 idxiidx_i 能使得 ai,idxia_{i,idx_i} 最小,所以 bi,j0b_{i,j}\ge 0,又因为 Δdi,j[0,1)\Delta d_{i,j}\in[0,1),所以 bi,j<2b_{i,j}<2,又因为 di,jZd_{i,j}\in\mathbb Z,所以 ai,jZa_{i,j}\in\mathbb Z,进一步地 bi,jZb_{i,j}\in\mathbb Z,所以最终 bi,j{0,1}b_{i,j}\in\{0,1\}
现在存在 bi,jb_{i,j} 不满足这个条件的 ii 一定不能放在答案里,那么我们对 bi,jb_{i,j} 的定义式进行变形得到:
Δdi,j=Δdu,j+Δdi,idxibi,jΔdu,idxi\Delta d_{i,j}=\Delta d_{u,j}+\Delta d_{i,idx_i}-b_{i,j}-\Delta d_{u,idx_i} 现在我们要开始填数了,定 ii,要求每个 jj 都满足要求,由于 Δdi,idxi\Delta d_{i,idx_i}Δdu,idxi\Delta d_{u,idx_i} 这两项与 jj 无关,可以当做定值,又由于 Δdi,j[0,1)\Delta d_{i,j}\in[0,1),那么我们就得到 ii 合法的充要条件:
Dj[1,n](Δdu,jbi,j)<1\text{D}_{j\in[1,n]}(\Delta d_{u,j}-b_{i,j})<1 其中 Di(x)=maxi(x)mini(x)\displaystyle D_i(x)=\max_{i}(x)-\min_{i}(x)
利用我们得到的 bi,jb_{i,j} 的值域(bi,j{0,1}b_{i,j}\in\{0,1\}),我们容易得到最终的条件:
maxj[1,n],bi,j=0Δdu,j<minj[1,n],bi,j=1Δdu,j\max_{j\in[1,n],b_{i,j}=0}\Delta d_{u,j}<\min_{j\in[1,n],b_{i,j}=1}\Delta d_{u,j}Si={jj[1,n],bi,j=1}S_i=\{j|j\in[1,n],b_{i,j}=1\},那么构造的集合合法当且仅当里面所有的 SiS_i 两两包含,否则条件会产生矛盾。
这样这道题就简单了,给所有的满足 SiSjS_i\subseteq S_j(i,j)(i,j) 连边(建出双向边,即 Si=SjS_i=S_j 时只保留一个方向)然后跑拓扑排序,找到最长路即可。
这时时间复杂度是 Θ(n2m)\Theta(n^2m) 的,能过 6060 分。
注意到 SiSjS_i\subseteq S_j 这个条件可以使用 bitset 优化,那么时间复杂度会除以一个 ww,就可以通过了。
时间复杂度为 Θ(n2mw)\Theta(\dfrac{n^2m}{w}),空间复杂度为 Θ(nm)\Theta(nm)

评论

3 条评论,欢迎与作者交流。

正在加载评论...