UOJ NOI Round #6

暴露真实水平了,我该怎么办???

Day1

A

首先注意到面基顺序与答案无关,因为如果提前与某个人面基了,那可以让那个人一直与你走相同的路线,等到轮到他面基时再面基。

所以,我们就是要选一个位置,使得所有人(包括你自己)到这个位置的距离的最大值最小。这个位置可以是一个点,也可以是某条边上的某个位置。

对于在点上会合的情况,直接枚举即可。对于在边上的情况,先枚举一条边 (u,v,w),那么在这条边上会存在 (k+1) 个分界点,每个分界点表示某个人从点 u 进入这条边更优,变为了从点 v 进入这条边更优。对于两个分界点间的情况,容易计算其答案。

时间复杂度 O(k(n+m)logmlogk)

B

我们令 01,11。设此时得到的原串为 S,新串为 T

定义合法括号前缀为一个由 11 组成的数列,且其前缀和总是 0

先考虑匹配怎么做,也就是说,我们需要检查是否存在一个合法括号前缀 W,使得 WT 的子序列,且去掉 T 中的某个 W 后,剩下的部分等于 S

我们贪心地匹配。假如当前匹配了 T 的前 i 位和 S 的前 j 位,且括号前缀的总和是 k。若 Ti+1=Sj+1,则下一位可以直接匹配。否则,若 Ti+1=1k>0,那么令 kk+Ti+1 即可。

如果 Ti+1=1,Sj+11,k=0,那么我们需要让 j 减少一些。我们找到最大的 p<j 使得 Spj 之和大于 0,并令 jp1。这是对的,因为任意两个合法括号前缀交替拼接起来以后,仍然是合法括号前缀。

对于计数,将上面的 i,j,k 记入状态,然后直接转移即可。

时间复杂度 O(nt(n+t))

Day2

A

F(S)=iSai

假如能找到两个集合 S,T[n] 使得 STF(S)=F(T),那么令 S(ST) 中的元素为 1T(ST) 中的元素为 1,其余元素为 0,这样就构造出了一组答案。

由于 2n1>p,根据鸽巢原理,总存在一个 s[0,p)Z 使得有至少两个集合 S 满足 F(S)=s,所以一定有解。

考虑分治。设 solve(l,r) 表示:我们要找一个 s[l,r] 使得存在集合 ST 满足 F(S)=F(T)=s,且保证 [l,r] 间有解。令 mid=l+r2,我们考虑求出有多少个 S 满足 F(S)[l,mid]。设这个数是 cnt,假如 cnt>midl+1,说明 [l,mid] 间一定有解;否则,(mid,r] 间一定有解。

现在我们需要处理 O(logp) 次询问,每次问 F(S) 在某个区间内的 S 的个数。折半,设 t=n2,开始时预处理 a1ta(t+1)n 的所有子集和,并从小到大排序,每次询问时,设 S=S1S2,有两种情况:F(S1)+F(S2)[l,r],以及 F(S1)+F(S2)p[l,r]。对两种情况分别双指针即可。

最后,我们需要对于分治找到的 s,求出两个集合。利用上面折半得到的信息不难求出。

时间复杂度 O(2n/2logp)代码实现

B

只补了 50 分做法。

首先,对于两个点 x,y,若存在 (x,y) 这条边,那么 x,y 连通当且仅当 (x,y) 这条边被选中。

考虑找到一种构造询问的方式,使得对于任意两条不同的边 (ui,vi),(uj,vj),都存在一个询问满足 i 被包含在这个询问中,而 j 不被包含。如果总询问次数为 2T(TN+),那么一条边 (x,y) 存在,当且仅当 xy 在恰好 T 次询问中连通。

一种询问次数为 2log2n 的构造:考虑二进制分组,对于每个 0i<log2n,我们取出所有二进制下第 i 位为 0 的边询问;再取出所有二进制下第 i 位为 1 的边询问。

一种询问次数为 log2n(1+o(1)) 的构造:我们找到 (n1) 个 popcount 恰好为 T2T 位二进制数,令 (n1) 条边分别对应这些二进制数。每次只需询问第 i 位为 1 的所有二进制数对应的边即可。

作者:alan-zhao-2007

出处:https://www.cnblogs.com/alan-zhao-2007/p/unr-6-sol.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Alan_Zhao_2007  阅读(84)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题