• 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 且异或之后 进位/不进位

  • 相关阅读:
    LeetCode 496. Next Greater Element I
    Scala基础教程--19--Actor
    玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一)
    解决问题:Unable to connect to Redis
    【森城市】GIS数据漫谈(一)
    PLSQL远程连接数据库
    KMP算法(题目)
    c++练习(10):链表练习
    MongoDB数据库(10亿条数据)清理策略: 自动化过期数据删除实战
    图书信息管理系统(二)
  • 原文地址:https://blog.csdn.net/m0_50170681/article/details/126142088