专栏文章

2025.1.14-1.15 PKUWC

个人记录参与者 4已保存评论 3

文章操作

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

当前评论
3 条
当前快照
1 份
快照标识符
@miqil0er
此快照首次捕获于
2025/12/04 05:23
3 个月前
此快照最后确认于
2025/12/04 05:23
3 个月前
查看原文

Day 1

早晨同张黄赵,四人一起前往龙山书院。按陈的路线,先地铁坐一站用了一两分钟,然后走了一公里多花了半小时,大约 9:009:00 到。这居然是赵第一次坐地铁。领了胸牌,照了合照,然后五人一起逛校园,顺便为 NOIWCNOIWC 的宿舍踩点,三个室友都不认识。逛太久了,开幕式没找到位置,只能坐在楼梯上听了一个小时,感觉内容和去年差不多
中午吸取教训,快速到达餐厅。午餐还是相当丰盛的,两荤两素。在报告厅里休息一个小时后,来到棒垒球馆
试机 30min30min。第一题之前做过,想了一会儿才写出来,但是 0pts0pts。第二题是交互题,看了一下是简单二分,但没有写。剩下时间只写了一份不太正确的 NTTNTT。休息 1010 分钟时,突然发现没拿笔,来不及取了,只能借了一支
下午 1:001:00 正式开始
先开了 T1T1,从数据范围看初步感觉是数学题或 dpdp 题,于是思考了一会儿,只想出了 a>b+1a>b+15pts5pts 的部分分:答案为 b+1b+1
之后转向 T2T2,一开始看错题,以为是简单三维偏序,写了一部分时发现不对,重新看题。感觉是大 dsds,只写了 n,m103n,m\le10^3 的暴力查询祖先然后去重,此时对 10410^4 级已经有大致构想了,但没有写
看了一下 T3T3,基本没有想法,于是继续磨 T1T1
题意可以转化选出若干二元组 (x,y)  (1x<ya+b)(x,y)\;(1\le x<y\le a+b),要求对于任意 aa11bb00 的序列 v1a+bv_{1\sim a+b},有 or(x,y)(vxvy)=1\operatorname{or}_{(x,y)} (v_x\land v_y)=1。当时想到类似之前模拟赛“原始人起洞”那题,从几何上考虑,想了许久想到了一个错的公式,连样例都没过
于是又去看 T2T2,做 10410^4 级的一档,一开始想长剖 O(1)O(1)kk 级祖先,但快写完才想到有更优且更加有优化前途的做法:对 xx 扫描线,于是快速写完过了
再回来看 T1T1,想了相当长时间,只过了 a=2a=25pts5pts,写了一大堆暴力,发现 a,b4a,b\le4 都跑不了,一度想放弃了,然后想到可以从序列的角度思考,相当于 a+ba+b 个点,选择若干对连无向边,要求从中选出 aa 个点必有两个为同一边的两端点,要求边数最小。这等价于 a+ba+b 点的无向图,要使最大独立集 a1\le a-1,求最小边数。由于前段时间网络流做多了(连做网络流 2424 题),想成二分图了,然后从最大流的方式考虑,发现样例都解释不了。之后想到一个构造方法,样例过了,a>b+1a>b+1a=2a=2 的也可以解释,但交了只有 10pts10pts。于是用暴力程序跑出 a=3,b=4a=3,b=4,画出来思考了一会儿,终于想到正解,过的时候已经下午 4:074:07
立刻转到 T2T2,想了一会儿下一档没有思路,去思考 T3T3
T3T3 花了一段时间才看懂题,写了 n,m,k100n,m,k\le 100dpdp,尝试卡过 30003000,没有 TT 但是 WAWA 了,想了半天没找到原因,尝试写出了缩点的 O(mk)O(mk) 做法,但是样例都过不了,此时已经来不及调了
最终 100+24+10100+24+10
出来之后同几人交流,张 100+26+0100+26+0,黄 100+41+0100+41+0cyfcyf 300300,诸 100+24+20100+24+20,唐 160+160+,范和赵 T1T1 都没过
由于晚高峰,回来时还是那条路。出地铁站时,张拿单程票在闸机上刷了四五次,才意识到是插进去,被笑话了许久
今天被 T1T1 卡了至少两三个小时

T1 电池检测

aa 个有电电池,bb 个没电电池,每次从中选出两个,求最优策略、最坏情况下,第一次同时取到两个有电电池的最小次数,a,b1000,a2,b1a,b\le1000,a\ge 2,b\ge 1,多测 T1000T\le1000
等价于 a+ba+b 个点,选择尽量少的边,使其最大独立集 a1\le a-1
a+ba+b 个点划分为 a1a-1 个团,显然这样是合法的,考虑最小化总边数
A=a+bA=a+bB=a1B=a-1
发现 AmodBA\bmod B 个团为 AB+1\lfloor\frac AB\rfloor+1 个点,B(AmodB)B-(A\bmod B) 个团为 AB\lfloor\frac AB\rfloor 个点时最优
赛场上写了单次询问 O(a)O(a) 模拟的做法,实际答案为 (AmodB)f(AB+1)+(B(AmodB))f(AB)(A\bmod B)f(\lfloor\frac AB\rfloor+1)+(B-(A\bmod B))f(\lfloor\frac AB\rfloor)(其中 f(x)=x(x1)2f(x)=\frac{x(x-1)}2),不难做到 O(1)O(1)

T2 Ancestors

给定 nn 点的树,mm 次询问每次给定 l,r,xl,r,x,求 {fax(i)lir}|\{fa^x(i)\mid l\le i\le r\}|,其中 fax(i)fa^x(i) 表示 xx 的第 ii 级祖先,若不存在则忽略该元素,n105,m106,l,r,xnn\le10^5,m\le10^6,l,r,x\le n
答案可以表示为 u=lr[depu>x][lv<u,depu=depv(deplca(u,v)<depux)]\sum_{u=l}^r[dep_u>x][\forall l\le v<u,dep_u=dep_v(dep_{lca(u,v)}< dep_u-x)]
lsx,uls_{x,u} 表示最大的 vv,满足 v<u,depu=depvv<u,dep_u=dep_v,且 deplca(u,v)depuxdep_{lca(u,v)}\ge dep_u-x,不存在则为 00
特殊地,若 depuxdep_u\le xlsx,u=ls_{x,u}=\infty
则答案为 u[lur][lsx,u<l]\sum_u[l\le u\le r][ls_{x,u}<l],为二维数点的形式,可 CDQCDQ 分治做
考虑计算 lsls 数组
对于每个 uu,若 v<uv<udepu=depvdep_u=dep_v,则 vvls,uls_{\ast,u} 的影响是令 lsx,u  (xdepudeplca(u,v))ls_{x,u}\;(x\ge dep_u-dep_{lca(u,v)})vvmax\max
对于每个深度分别处理。按编号从小到大扫描该深度的所有点,令当前扫到的点为 uu,每次令 uu11 的链上所有点赋值为 uu,则 lsx,uls_{x,u}(在赋值之前计算)等于 xx 的第 xx 级父亲的值,若没有第 xx 级父亲则为 \infty
(该技巧类似于 P4211 [LNOI2014] LCA,比赛前两天刚做过,但赛场上没想到,可悲)
每个数组 lsi,ls_{i,\ast} 中相同的并为一段,通过树链剖分,转化为 O(nlogn)O(n\log n) 次区间赋值,每次将异色两段合并为一段代表 lsls 的一段,可以颜色段均摊做到总段数 O(nlogn)O(n\log n)
离线所有询问,转化为 O(nlogn)O(n\log n) 次单点修改和矩形查询,CDQCDQ 分治即可
总时间复杂度 O((nlogn+m)log(nlogn+m)logn)=O(nlog2nlogm+mlognlogm)O((n\log n+m)\log (n\log n+m)\log n)=O(n\log^2 n\log m+m\log n\log m),因为树剖和树状数组常数小,所以可以过

T3 基础博弈练习题

给定 nnmm 边的有向图,点有点权 aia_i。定义一次对 ssb1kb_{1\sim k} 进行一次游戏为进行 kk 轮博弈,一个物体初始在 ss,第 ii 轮中选择一个当前物品所在点可达的点(至少移动一步),满足那个点的点权等于 bib_i,并将物品移过去。给定 b1kb_{1\sim k},对于每个 1sn1\le s\le n,求出最小的 0r<k0\le r<k,使得仅取 br+1kb_{r+1\sim k} 进行游戏先手可胜,若不存在则为 1-1n,k106,m2.2×106n,k\le10^6,m\le2.2\times10^6
考虑 dpdp
fi,jf_{i,j} 表示取 iibjkb_{j\sim k} 进行游戏先手是否必胜
fi,k+1=0f_{i,k+1}=0,令 to(x)to(x)xx 的所有可达点,转移为 fi,j=oruto(i)[bj=au](¬fu,j+1)f_{i,j}=\operatorname{\mathop{or}}_{u\in to(i)} [b_j=a_u](\lnot f_{u,j+1})
答案容易从 ff 得到
直接做时间复杂度 O(n2k)O(n^2k),可 bitset 优化到 O(n2kω)O(\frac{n^2k}\omega)
对于同一强连通分量中的 i,ji,j,对于 1sk1\le s\le kfi,s=fj,sf_{i,s}=f_{j,s}
于是对原图进行缩点,每个联通块为单位处理,转移时按照拓扑序递推,可做到 O(nm)O(nm)
考虑优化状态设计
显然同一 SCCSCCff 值相同
FiF_i 表示最小的 xx 使得 fu,x=1f_{u,x}=1,其中 uu 为编号为 iiSCCSCC 中的节点,容易由其得到答案
将原图 SCCSCC 缩点,在反向图上拓扑排序的同时计算 FF
初始所有 Fi=k+2F_i=k+2
若当前处理节点 ii 对应的 SCCSCC 中节点数 >1>1,则可以在该 SCCSCC 内部移动若干次
mnpsvmnps_vvv 在数组 bb 中第一次出现的位置
mpmpmnpsaimnps_{a_i} 的最小值,其中 ii 为当前处理 SCCSCC 中的点,其表示 bmpb_{mp} 在当前 SCCSCC 中有对应点
mpFimp\ge F_i 显然没有必要跟新
mp=Fi1mp=F_i-1,则相当于令后手必胜,显然不优,此时也不需要更新
否则显然以当前 SCCSCC 开始,可以从 bmpb_{mp} 开始移动
若从 bmpb_{mp} 开始先手必胜,则 FimpF_i\gets mp,否则 Fimp+1F_i\gets mp+1,考虑如何判断
ctct 为满足 {bmpct}Sa\{b_{mp\sim ct}\}\subseteq S_a 的最大值,其中 SaS_a 表示当前 SCCSCC 中所有节点的 aa 构成的集合
min(ct,Fi1)mp\min(ct,F_i-1)-mp 为奇数则先手必胜,否则后手必胜,可分类讨论证明
对于反图上 ii 的后继节点 vv,有 Fvmin(Fv,Fi)F_v\gets \min(F_v,F_i),因为先手可由 vv 进入 ii
ii 对应 SCCSCC 大小为 11 时,只能在其上停留最多一个 bsb_s
pp 为该 SCCSCC 中唯一点
mnpsap<Fi1mnps_{a_p}<F_i-1,则在点 iibmnpsapb_{mnps_{a_p}} 开始且 允许第一步可移动 00 的距离的情况下(因为题目要求至少移动一步,对于 SCCSCC 大小大于 11 的可以绕一圈回来,不影响,但是对于 SCCSCC 大小等于 11 的,其不符合要求,但从 vv 出发就合法了) 必胜,Fvmin(Fv,mnpsap)F_v\gets \min(F_v,mnps_{a_p})
时间复杂度可以做到 O(n+m)O(n+m),常数极大

Day 2

早上到达学校,两场讲座都是 45min45min,都和 AIAI 有关,感觉很有意思
中餐仍然两荤两素。在报告厅休息一会儿后开始下午的考试
昨天试机 T2T2 放交互不是没有原因的,Day2Day2 T1T1 就是交互。想了一会儿没有思路,于是看了一下 T2T2。同样没有思路
转到 T3T3,先写了 B40,r106B\le 40,r\le 10^6 的,然后狄利克雷卷积优化过了 r5×106r\le 5\times10^6 的,最后暴力搜索过了 l=r,B4l=r,B\le 4 的一档,总计 44pts44pts
之后转战 T2T2,写了一个做法结果 0pts0pts,想了一会儿成功把自己 hackhack 了。应该想到了 c=1c=1 的正解,优化了暴力,但没有调出来
T1T1 想到了之前做的一题,那题是其弱化版,树换成序列,于是尝试从 T1T1 拿分。思路是先找到相近的两个点,然后由其找到直径的一端,再由其找到直径的另一端。写的过程中想到相当多的特殊情况,不知道如何解决。写了一大段满是 bugbug 的代码,调了许久,过了所有样例和自己造的数据,但仍然一分未得
大约 4:304:30 左右又回来调 T2T2WAWA 了几次后回去继续磨 T1T1,但一直到结束都没有做出来
最终 0+0+440+0+44,最惨的一次
张第二题拿了七八十,其余一样;范好像只有 3030 多;唐逸然 120+120+;其余人大都分数比我高一个数量级
死磕 T1T1 应该是做的最错误的一个决定
两天都死在 T1T1 上,但愿之后的 NOIWCNOIWC 不要再这样了

T1 网友小 Z 的树

给定 nn,存在一个 nn 点的树。交互库支持两种操作,操作一为给定 i,j,ki,j,k 返回 query(i,j,k)=dis(i,j)+dis(i,k)+dis(j,k)  (ijk)query(i,j,k)=dis(i,j)+dis(i,k)+dis(j,k)\;(i\ne j\ne k),操作二是给定 i,j,ki,j,k 返回 ii 是否在链 jkj-k 上。前者调用不超过 3×1053\times10^5,后者调用不超过 22 次,求出树的任意一条直径的两端点。n105n\le10^5,多测 T104T\le10^4n106\sum n\le10^64s4s,保证 2×1072\times10^7 次操作一和 2×1042\times10^4 次操作二交互库耗时不超过 3s3s
n4n\le 4 时特判
n5n\ge 5 时,设 (52)\binom 52 个未知元,分别表示 151\sim 5 中两点的距离,然后 (53)\binom 53 次询问设出 (53)\binom 53 个方程,解出 151\sim 5 两两之间的距离(高斯消元),从而求出前 55 个点的直径的两端
假设前若干点的直径为 xyx-yzz 为一个不等于 xxyy 的点,且 x,y,zx,y,z 两两之间的距离已知,要加入下一个点 ii,则根据直径的性质,加入下一个点后的直径一定为 xix-iyiy-i,询问 (i,x,y)(i,x,y)(i,x,z)(i,x,z)(i,y,z)(i,y,z),可解出 iix,y,zx,y,z 三点的距离,即 x,y,z,ix,y,z,i 两两距离已知,更新信息即可
总询问次数为 3(n5)+(53)=3n53(n-5)+\binom 53=3n-5,时间复杂度 O(n)O(n),常数略大

T2 盒子

给定 a1n,m,k,ca_{1\sim n},m,k,c,每次花 11 的代价令某个 aia_i 减一,或花 cc 的代价选择一个长为 mm 的区间,令区间中的数减少,减少总量不超过 kk,求令 aa 全部变为 00 的最小代价,多测 n5×105,1ai,k,c109,ck\sum n\le5\times10^5,1\le a_i,k,c\le10^9,c\le k
显然存在一种最优方案,对于每个操作二的连续段(将操作二修改的区间从左到右排序,若相邻一对有交则并入同一连续段),满足操作二取走了它的一个前缀,剩余部分及所有连续段以外的部分用操作一清除
rpirp_i 表示只用操作二(且每次操作都用尽 kk 个数),最多能清除 [i,rpi)[i,rp_i),令 fif_i 表示清除 [i,n][i,n] 的最小代价,令 S(l,r)=i=max(l,1)min(r,n)aiS(l,r)=\sum_{i=\max(l,1)}^{\min(r,n)}a_i,令 ssaa 的前缀和数组
假定已经求出 rprp,考虑如何计算 ff,显然 fn+1=0f_{n+1}=0,在 fif_i 处先清除 [i,rpi)[i,rp_i) 一定最优,若 rpi=n+1rp_i=n+1fi=cS(i,n)kf_i=c\cdot \frac{S(i,n)}k,否则已经用了 cS(i,rpi+m1)kc\cdot \left\lfloor\frac{S(i,rp_i+m-1)}k\right\rfloor,此时 [rpi,rpi+m2][rp_i,rp_i+m-2] 中还剩下一部分,若使用操作一清除则 fifrpi+1+cS(i,rpi+m1)k+S(i,rpi+m1)modkS(rpi+1,rpi+m1)f_i\gets f_{rp_i+1}+c\cdot \left\lfloor\frac{S(i,rp_i+m-1)}k\right\rfloor+{S(i,rp_i+m-1)}\bmod k-S(rp_i+1,rp_i+m-1),否则用一次操作二即可清除,转移为 fifmin(rpi+m,n+1)+cS(i,rpi+m1)k+cf_i\gets f_{\min(rp_i+m,n+1)}+c\cdot \left\lfloor\frac{S(i,rp_i+m-1)}k\right\rfloor+c
问题转化为如何计算 rprp
显然 rpi=mint=1n{tS(i,t+m1)modk>S(t+1,t+m1)}rp_i=\min_{t=1}^n \{t\mid S(i,t+m-1)\bmod k>S(t+1,t+m-1)\}(若不存在符合条件的 ttrpi=n+1rp_i=n+1
直接计算为 O(n2)O(n^2) 的,无法接受
该过程可以替换为先令所有 rprp 赋值为 n+1n+1,然后从 nn11 枚举 tt,对于所有满足 1it,S(i,t+m1)modk>S(t+1,t+m1)1\le i\le t,S(i,t+m-1)\bmod k>S(t+1,t+m-1) iirpirp_i 赋值为 tt
[S(i,t+m1)modk>S(t+1,t+m1)]    [(smin(n,t+m1)si1)modk>smin(n,t+m1)st]    [(Ux)modk>St]{let St=smin(n,t+m1)st,U=smin(n,t+m1)modk,x=si1modk}\begin{aligned} &[S(i,t+m-1)\bmod k>S(t+1,t+m-1)]\\ \iff &[(s_{\min(n,t+m-1)}-s_{i-1})\bmod k>s_{\min(n,t+m-1)}-s_t]\\ \iff &[(U-x)\bmod k>St]&\{\text{let}~St=s_{\min(n,t+m-1)}-s_t,U=s_{\min(n,t+m-1)}\bmod k,x=s_{i-1}\bmod k\}\\ \end{aligned}
StkSt\ge k 显然对 rprp 无影响,否则显然 k<Ux<k-k<U-x<k,分类讨论得
[(Ux)modk>St]    [(Ux<0Ux+k>St)(Ux0Ux>St)]    [(U<x<U+kSt)(xUUSt>x)]    [U<x<U+kSt0x<USt]\begin{aligned} &[(U-x)\bmod k>St]\\ \iff&[(U-x<0\land U-x+k>St)\lor (U-x\ge 0\land U-x>St)]\\ \iff&[(U<x<U+k-St)\lor (x\le U\land U-St>x)]\\ \iff&[U<x<U+k-St\lor 0\le x<U-St]\\ \end{aligned}
相当于有数组 v0k1v_{0\sim k-1},初始全为 n+1n+1,然后将区间 (U,U+kSt)(U,U+k-St)[0,USt)[0,U-St) 赋值为 tt,然后令 rpt=vsi1modkrp_t=v_{s_{i-1}\bmod k}
ODT\text{ODT} 维护 vv 即可
时间复杂度 O(nlogn)O(\sum n\log n)

T3 数字变换

初始 x=1x=1,每次 xx+1x\gets x+1,或 xx1x\gets x-1,或 xxk(k>1)x\gets xk(k>1),保持 xx 全程为正,求对于每个 lirl\le i\le r,在不超过 bb 步内得到 ii 的方案数取模,b100,rl30000,r3×109b\le100,r-l\le30000,r\le3\times10^9

final

预计优异要 400pts400pts 左右,我才 17817844%44\%

评论

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

正在加载评论...