• JOIG 2022 题解


    题目链接

    A

    直接计算。

    B

    直接枚举。

    C

    直接前缀和。

    D

    容易发现选择的九宫格重心一定只会在已有糖果的外围一圈(即与当前格子八连通的格子)。

    unordered_map 即可。

    代码链接:https://paste.ubuntu.com/p/GxstzCZMxC/

    E

    \(f_i\) 为到 \(i\) 且必选 \(i\) 的最大价值。

    转移:\(f_i=\max\limits_{j<i\land a_j\not=a_i}\{f_j\}+a_i\)

    维护一个区间 \(\max\) 线段树,下标是颜色。

    用线段树维护 DP 即可。

    时间复杂度 \(\mathcal{O}(n\log m)\)

    代码链接:https://paste.ubuntu.com/p/9NprmfNjvs/

    F

    看到除法不好处理,于是逆向考虑问题。即从 \(t\) 出发到达 \(1\) 需要的最小代价。这时操作就变成了 \(+1\)\(\times2\)

    先看链的情况,考虑每次在 \(i\) 后面加一个点 \(i+1\) 需要增加多少代价。可以发现代入之后就是从 \(i\) 出发代价已经为 \(2\) 的情况下到 \(1\) 需要的最小代价。

    如何 \(\mathcal{O}(1)\) 转移这个代价?

    思考一下可以发现,每一次 \(\times2\) 操作后从 \(i+1\) 出发的代价与从 \(i\) 出发的代价的差值都会 \(\times2\),即 \(\Delta=\Delta'\times2\),而 \(+1\) 操作差值不变。

    于是我们可以得出:增加的代价是 \(i\) 之前 \(\times2\) 操作的次数即青色边条数。

    因为 \(l\le10^9\),所以 \(\times2\) 操作次数不会超过 \(\log_2 l\le30\)

    引入分层图的思想,设 \(dis_{i,j}\) 表示经过 \(i\)\(\times2\) 操作后到达点 \(j\) 的最小代价,Dijkstra 即可。

    时间复杂度 \(\mathcal{O}(m\log m\log l)\)

    代码链接:https://paste.ubuntu.com/p/zP2hNzGzMR/

  • 相关阅读:
    css的书写位置+元素分类
    选择器
    我的js运动库新
    js的相关距离
    关于小乌龟的使用
    linux 基础
    linux shell快捷操作【超级实用】
    算法面试常见问题【转】
    http://www.cnblogs.com/zhangchaoyang/archive/2012/08/28/2660929.html
    cocos2dx + vs安装使用
  • 原文地址:https://www.cnblogs.com/xsl19/p/joig2022_sol.html
Copyright © 2020-2023  润新知