2023.6.12 NOI模拟赛总结

1.时间安排

7:10~9:00

T1:关于实数的概率期望,在区间内撒实数点,看起来比较抽象,题意是和笛卡尔树相关的,没观察出特别处。

T2:最优化DP。题目给了一个非常逆天的分段函数,一次拼上两个二次,观察不出任何可以用的维护最优化DP的东西。

T3:神秘线性代数题,大概大家都是暴力分,暴力行列式有16分。

一开始想的是全排列枚举每个数的排名,计算满足这个排列的概率,但是卡在了计算概率上。

离散化是肯定的,枚举当前的放在哪里,前面的如果小于这个位置是简单的,难点在如何计算落在的段相同时的概率。

一开始感觉是一个特殊的转移系数,推了很久都没推出来合理的系数,有点自闭,已经过于1h++,决定先换题换换脑子。

T3打了个暴力行列式,试着推一推题面给的柯西比内公式看能否配上一个非常巧的矩阵B,但是我不会。

然后写了个T2的暴力,感觉 \(a_i=d_i=n\) 是可以写的,留着暴力对拍。

9:00~10:00

继续推T1的概率计算方式,这时候重新读题面的样例解释,意识到也许可以把落在的段相同的点额外计算。

那么就需要把DP加一个维度,\(f_{i,j,k}\) 表示 \(i\) 落在段 \(j\),此时这个段有 \(k\) 个点的概率,根据样例解释的启发,如果新建一个段,那么概率直接乘上一个 \(\frac{1}{k!}\) 就好。

写完这个 \(O(n!n^4)\) 的东西,测一下样例对了,但是没大样例,从头缕了一遍流程,感觉是没问题的,只能相信。

虽然能前缀和优化到 \(O(n!n^3)\) ,但是自己造了个满数据,跑的还挺快,就没管(大常数OJ伏笔)。

10:00~12:00

一开始以为 \(a_i=d_i=n\) 是难做的性质,后来发现在这个条件下这个二次函数增长非常满,换句话说,选跨全局的二次函数甚至不如每个都是一个单独的二次函数,于是直接全加起来就好,可以和暴力拍上随机数据。

然后打表,试图找点二分/三分的东西,果然什么都没,于是开始乱搞,划分若干个区间然后分别三分,随一些点取最优,随机数据稳定跑。

result:

T1:45 T2:24 T3:4

(都是细节挂的分……不发大样例/zhm/zhm/zhm/tuu/tuu/tuu)

2.总结

T1:

从指数级算法到多项式算法需要用到化整体为部分的思想。

考虑我们要算的东西是每个点在笛卡尔树上的深度,一个点到根的距离等价于一个点到根的链上的点数-1(自己)。

于是我们可以枚举每个点对,计算他们在笛卡尔树上有祖先关系的概率,根据期望的定义和线性性质直接把概率相加即可。

有祖先关系的条件是简单的,假设现在求 \(i<j\)\(j\)\(i\) 的祖先,那么只需要满足 \(i\)\(j-1\) 的所有点都小于 \(j\) 即可,这个DP只需要枚举右端点和右端点所在的段,然后 \(O(n)-O(n)\) DP算中间这一段的概率即可。

观察我们的DP过程,发现左端点是谁并不重要,于是可以先枚举段,然后从左到右记录一个类似扫描线的和,正着扫一遍,每个位置如果可以成为右端点就算一下左端点的和,内层的DP是 \(O(n)-O(1)\) 的,整体复杂度 \(O(n^3)\),可以通过。

T2:

题目的函数不是乱给的(他说他是乱给的,他可不是乱给的昂)。

如果函数去掉第三部分,那么把分段函数的前两段分开成两个独立的部分,忽视掉定义域的限制,会发现是不影响两个函数取max的正确性的,因为相交以后两个函数都一直在减,观察出这个就可以简单李超树维护了。

李超树是有可以维护二次函数的写法的,不过最常见的还是转成一次函数,也就是把平方项独立出来,放到对应下标特殊计算,树上维护的还是一次函数。

现在考虑上第三部分,因为他相交之后是增的,会影响正确性,所以不能直接加入。

我的处理方法是在满足定义域的位置再加入这个二次函数,也就是类似扫描线的东西,恰好这个函数定义域是没有右边界的,所以可以顺序扫,仍然可以跟第二个部分一样简单地用李超树维护。

T3:

L什么V?LG什么?什么GV?

posted @ 2023-06-12 19:10  Displace  阅读(24)  评论(0)    收藏  举报