ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JOIG2022 题解

2022-02-02 16:33:37  阅读:155  来源: 互联网

标签:JOIG2022 paste log 题解 times2 ubuntu mathcal 代价


题目链接

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/

标签:JOIG2022,paste,log,题解,times2,ubuntu,mathcal,代价
来源: https://www.cnblogs.com/xsl19/p/joig2022_sol.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有