多校 A 层冲刺 NOIP2024 模拟赛 16

多校A层冲刺NOIP2024模拟赛16

T1 四舍五入

签到题

注意到一个数是否会入上去只和其剩余系有关,即满足 \(i\mod j<\frac{1}{2}j\),会入上去,考虑枚举 j 的倍数,其贡献就成了一个区间,差分即可。

时间复杂度是调和级数的,为 \(O(n\ln n)\)

T2 填算符

贪心,特殊性质

显然将所有 \(\&\) 放在最左端一定不劣(不管是考虑多少),考虑在此基础上调整即可。

具体的可以贪心调整最右边一个,即将最右边的从最右端往左移,第一个合法的即使其所在位置,然后由于是 \(\&\) 操作,他的贡献会与前边的挂钩,找到它独一无二的贡献,作为下一个合法的判断即可。

时间复杂度为 \(O(n\log n)\)

T3 道路修建

基环树,换根DP,树上问题,树链剖分,线段树,倍增

发现加边操作后的答案一定会包含原树的答案,而新加的答案为所有经过所加边的路径。

所以可以先 \(O(n)\) DP,算出原树的答案,然后考虑新增边的贡献。

考虑套路,计算路径长度的和转化为每一条边的贡献(经过的次数)。

由于是基环树,可以先考虑环上的边的贡献。

这一部分可以分为新加边和原树边。

  • 新加边
    显然经过其的次数为总路径的个数,考虑计算总路径的个数。路径只有两个端点,而现在又钦定了必须经过新加边,而且有路径点不交的限制,所以只要选出两个点则能对应唯一的路径。即就是 \(\binom{n}{2}\),但此时算入了两个点都在同一个子树的贡献,减掉即可。
    记为 \(tot=\binom{n}{2}-\sum_{v\in circle}\binom{siz_v}{2}\)

  • 原树边
    显然能求出不经过的次数(相对于当前所加边而言),即边两边联通块的大小之积,记为 \(g_i\),则经过的次数就为 \(tot-g_i\)

所以环上边的贡献为 \((dis_{u,v}+1)tot-\sum_{v\in circle}g_v\)

再考虑子树(环上的子树)的贡献

  • \(f_i=\sum_{v\in subtree_i}dis_{i,v}\),则一个子树的贡献为 \(f_i(n-siz_i)\)

所以总贡献为 \((dis_{u,v}+1)tot-\sum_{v\in circle}g_v+\sum_{v\in circle}f_v(n-siz_v)\)

现在考虑怎么快速求出 \(\sum_{v\in circle}\binom{siz_v}{2},\sum_{v\in circle}g_v,\sum_{v\in circle}f_v(n-siz_v)\) 这三个部分,分别记为 \(res1,res2,res3\)

  • \(res1\)
    直接维护的难点在于 \(siz\) 在变(因为定义的是环上的子树),所以可以考虑树剖 \(siz\) 只维护所有的轻儿子的贡献,这样除了链底需要特殊处理,其他的能直接维护在线段树上。还需特殊处理 \(lca_{u,v}\),记 \(tot_i=\sum_{j=1}^ndis_{i,j}\) (不同与前面的 \(tot\)),所以得换根 DP 求出 \(tot\) 数组。

  • \(res2\)
    每个点套路维护其父向边的 \(g\) 数组,树剖即可。

  • \(res3\)
    类似 \(res1\)

总时间复杂度为 \(O(n\log^2n)\)

可以倍增,这样就能优化掉一支 \(\log\)

T4 逆序图

DP,结论题

不会,但是可以讲讲结论

upd:会了,但是先讲讲结论

结论:逆序对的关联关系不会是嵌套状的,即关联关系会构成一段区间,并且这一段区间的值是连续的

证明考虑反证法,即尝试用 \(4\) 个值构造出一个嵌套状的关联关系,发现由于单调性显然是不行的。

即就是说序列是一些单调递增的连通块组成的

题目所求的即是在这些连通块中每个至多选择一个的权值之积。并且很好的是题目算贡献的方式考虑的两点之差,所以只用考虑相对量。

考虑 DP 解决。

  • 设计状态
    \(f_{i,0}\) 表示钦定 \(1∼i\) 在同一个(不一定合法)连通块内部时的权值和。
    \(f_{i,1}\) 表示恰好 \(1∼i\) 在同一个(一定合法)连通块内部时的权值和。
    \(g_i\) 表示恰好 \(1∼i\) 在同一个(一定合法)联通块内的方案数。

  • 转移

    \[f_{i,0}=\sum_{j=1}^{i-1}F_j(i-j)\binom{i}{2}(i-2)! \]

    考虑每一对的贡献即可。

    \[g_i=i!-\sum_{j=1}^{i-1}j!g_{i-j} \]

    容斥计算。

    \[f_{i,1}=g_i-\sum_{j=1}^{i-1}j!f_{i-j,1}+f_{j,0}g_{i-j} \]

    同理容斥。

最后将块拼接起来即可。

\(res_i\) 表示考虑 \(1∼i\) 的答案

则有转移

\[res_i=\sum_{j=0}^{i-1}res_jf_{i-j,1}+res_jg_{i-j}+j!f_{i-j,1} \]

三项转移分别是这一块,不选这一块,以这一块为起点

时间复杂度为 \(O(n^2)\)

FFT能优化为 \(O(nlogn)\),不会多项式。

p

posted @   Qyun  阅读(93)  评论(8编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示