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/