8.2模拟赛总结

Posted Flame♡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.2模拟赛总结相关的知识,希望对你有一定的参考价值。

难得的没有挂分)

7.30-8.30

看T1 感觉没啥好想法 没编出来什么依赖log树高的做法

想到二分答案之后不知道怎么check

8.30-10.00

看T3 打部分分 想了想还能不能优化

10.00-11.30

看T2 把链也写了 然后想了想往后怎么做

11.30-12.30

想T1

题目分析

T1

暴力求c数组

upd

考虑二分答案为 m i d mid mid 那么我们就需要统计小于 m i d mid mid 的路径条数

注意到我们不用枚举每个端点 而是可以采用枚举lca来计算的方式

考虑优化,我们发现我们枚举每个点的时候 都在重复路径上跳考虑所有lca

因此我们可以考虑dfs 然后加进去所需要的点 这样lca在dfs的时候就已经知道了 把值放到树状数组里然后而二分就行

T2

这个题其实我做的不好 因为我想到链了之后 我的做法是非常容易往树上靠的

f [ i , j , o p ] f[i,j,op] f[i,j,op] 表示前 i i i 个位置形成指定序列最少需要 j j j 次操作 最后一个点的状态是 o p op op

这样每一种序列就可以唯一表示

upd

正解考虑上述dp上树 然后一个巧妙的地方就是 为了避免巨大分类讨论 可以考虑 access操作对应儿子边全0(但如果子树内没有acc的话 则不用操作) 否则对应有一个儿子有边

为了简化上述操作 我们强制让儿子边全0时必须acc 但转移时 如果出现了儿子父亲均acc了(且儿子的子树内仅有儿子acc了) 则可以去掉儿子acc的方案

T3

考虑dp f [ v 1 ] [ v 2 ] : m a x = v 1 , x o r = v 2 f[v1][v2]:max=v1,xor=v2 f[v1][v2]max=v1,xor=v2 的方案数

upd

一个好的优化技巧:max这个东西可以讨论是在什么位置取到max的 然后就可以前缀和优化

正解考虑每一位分开做

f [ M ] [ b i t ] [ v ] f[M][bit][v] f[M][bit][v] 表示 m a x = M max=M max=M b i t bit bit 位 是 v v v 的方案数

那么其实就是要求我们求有多少个 i i i 满足 ( i + M )   x o r   M (i+M)~xor~M (i+M) xor M 的第 b i t bit bit 位是 v v v

我们发现这个东西只和 M , i M,i M,i M + i M+i M+i 是否进位有关

那么可以枚举 i i i 在这一位的值 然后计算有多少个 i i i 满足这一位上是 t t t 且异或之后 进位/不进位

以上是关于8.2模拟赛总结的主要内容,如果未能解决你的问题,请参考以下文章

保存屏幕截图时 Xcode 8.2 模拟器崩溃

对于相同的 iPhone 5s,iOS 模拟器在 ios 7.1 和 ios 8.2 之间具有不同的屏幕高度

第四周总结 8.2

自个儿写Android的下拉刷新/上拉加载控件 (续)

CSP-S 模拟 R2D2 总结

初识C++之AVL树