2024.11.30 NOIP

\(8:30\) 开始后,先花 \(2\sim 3\) 分钟写完主程序模板,包含空间使用情况监控

\(T1\) \(edit\) 一开始理解错题意,看了一眼样例发现不对,于是先模拟一遍样例,大约十分钟后想到正确思路,直接写代码,中间重构一次,大约 \(9:10\) 写完一遍过所有样例(应该是简单贪心,赛时方法过了民间数据

\(T2\) \(assign\) 一开始以为是 \(dp\),重构了两次,发现很难写。之后将 \(b\) 的下标平移一格,转化为 \(a_{[1,n)}\)\(b_{2\sim n+1}\)\(1\sim v\),对于相邻位置 \(x,y\),将 \(a_{[x,y)}\)\(b_{(x,y]}\) 看做一个整体计算,直接相乘即可,大约 \(10:00\) 左右过了大样例(过了民间数据)。后来听说有矩阵快速幂的做法(虽然更慢)

个人感觉前两题的难度交换一下更合适

\(T3\) 题目上有一句话,大意是注意读入速度。估算了一下第三题读入量最大,\(3e6\) 个整数,于是做了测试发现 \(2e6\)\(2s\) 多,又写了快读,结果是没有开解流。开了之后 \(3e6\) 大约半秒。此时大约 \(10:15\)

\(T3\) 初看题面没有思路,于是先开 \(T4\)

发现 \(T4\) 可以转化为求给定区间中长度至少为 \(k\) 的子区间的最小值的最大值,先打了暴力 \(20pts\),然后想到主席树做法,但很卡,于是先写了 \(B\) 性质 \(12pts\),之后才写了 \(1e5\) 的二分套主席树,\(32pts\)。一共 \(64pts\)。此时大约十二点多

于是回去做 \(T3\),只写了 \(12pts\) 的暴力(后来发现好像还是错的),\(k=1\) 没有调完

总分预计 \(264\)

问了其他几个人,似乎除 \(cyf\) 外上 \(300\) 的很少,有几个人 \(T2\) 都没调出来


以下为 T3 T4 的题解

P11364 [NOIP2024] 树上查询(民间数据)

\(a_i=dep_{lca(i,i+1)}\),则一次查询 \((l,r,k)\) 等价于求 \([l,r)\) 中长度至少为 \(k-1\) 的区间最小值的最大值

以下用 \((L,R,K)\) 表示一组询问 \((L,R+1,K+1)\)

将询问离线,特判 \(k=1\) 的情况(这时的答案为 \(\min_{i=l}^r dep_i\)\(RMQ\) 快速处理)

可以转化为求出最大的 \(v\),令 \(b_i=[a_i\ge v]\),使得存在 \(b\) 的连续 \(1\) 子段,满足该子段和 \([L,R]\) 的交不小于 \(K\)

对于每个 \(1\le i<n\),预处理出极长子段 \([l,r,a_i]\),满足 \(\min_{j=l}^ra_j=a_i\)

答案有三种情况,子段完全包含 \([L,R]\),子段左端点小于等于 \(R\),子段右端点大于等于 \(L\)。考虑分别统计

对于第一种情况,直接计算即可(也不需要考虑 \(K\) 的约束)

后两种情况相同,只考虑第一种

显然合法的充要条件为左端点必须在 \([L,R-K+1]\) 中,两端点组成区间长度必须 \(\ge K\)

即有若干点 \((x,y)=(l,r-l+1)\),每次询问 \((L,R,K)\),询问 \(x\in[L,R-K+1],r\ge K\) 的点中最大的点权

显然可以从 \(n\)\(1\) 扫描 \(y\) 坐标实现

总时间复杂度 \(O(n\log n)\),空间 \(O(n)\sim O(n\log n)\)

代码

参考

P11363 [NOIP2024] 树的遍历(民间数据)

因为是 \(dfs\) 生成树,故不存在横叉边

因此对于每个 \(u\),由它出发的所有边对应的节点,在新树上一定组成一条链

对于一棵新树,可证新树上可能为根(即以该点为根,新树是新图上合法的 \(dfs\) 生成树)的节点对应的边在原树上是一条叶子到叶子的链

设节点度数为 \(d\)

若给定一条链(原树上),则对于链上每个节点(不含两端,以下记其集合为 \(S\)),其所有出边在新树上构成的链的两端,分别对应当前节点连向给定链上前一个和后一个节点的边,剩余 \(d-2\) 个顺序任意,贡献为 \((d-2)!\)

对于不在链上的每个节点(含链的两端),其朝向给定链的出边对应节点一定是其所有出边在新树上构成的链的第一个节点(朝向根的节点),其余顺序任意,贡献为 \((d-1)!\)

每个 \(S\) 的贡献为(假定 \(0^{-1}=1\)

\[\begin{aligned} &\prod_{u\notin S}(d_v-1)!\times \prod_{u\in S} (d_u-2)!\\ =&\prod_{u\notin S}(d_v-1)!\times \prod_{u\in S} \frac{(d_u-1)!}{d_u-1}\\ =&\prod_{1\le u\le n}(d_v-1)!\times \prod_{u\in S}{(d_u-1)}^{-1} \end{aligned}\]

前一项容易计算

对于后一项,记 \(u\) 的权值为 \({(d_u-1)}^{-1}\),则总和为从原树上找到一条叶子到叶子的链,满足链上至少一条边为选定的关键边,这样一条链的权值为链上点(不含两端)的权值之积,求所有可能的方案的权值之和

显然可以通过 \(dp\) 解决

时间复杂度 \(O(\sum n)\)

需要特判 \(n=2\) 的情况,此时答案为 \(1\)

代码

参考


2024.12.6:成绩出来了,\(100+100+12+64=276\)\(T3\) 高于预计(赛后认为场上写的 \(12pts\) 暴力是错的,想到卡的方法了,但过了,感觉数据好水)

posted @ 2024-12-02 18:39  Hstry  阅读(93)  评论(0)    收藏  举报