竞赛讨论区 > 【题解】wannafly挑战赛12
头像
牛客网小运营
编辑于 2018-12-27 14:47
+ 关注

【题解】wannafly挑战赛12

(题解由比赛出题人提供,点击右侧“本文相关内容”的题目即可开始做题)

T1 银行存款
首先,假设存款的方案(a1 次一年期,a2 次两年期,a3 次三年期,a5 次五年期)已 知,那么其实存款的顺序是不影响答案的,答案为
再观察到 n 只有 20,所以我们只要枚举每种年限的存款存多少次就可以了。

T2 T95要减肥
***肯定从快乐值高的开始吃,赛道肯定从痛苦值低的开始跑。 因为吃***得到的快乐值非负,所以有吃***的次数=跑步的次数。 那么我们只要枚举吃了几次***(即跑了几次步)就可以了。

T3 删除子串
f[i][j]表示前 i 个字符,变化了 j 次后保留的字符串长度的最大值。 当 j 确定的时候,保留字符串的最后一位是 a 是 b 也是确定的。 当保留的字符串的最后一位与当前位一样时,直接保留这一位;
否则,当保留的字符串的最后一位与当前位不一样时,有两种选择,要不删除这一位,要不变化一次。 转移一下即可。

T4 矩阵计数
矩阵计数 这是一个经典问题,先介绍一个O(nm)的暴力。枚举每一行作为子矩阵的下边界处理出每个点向上连续有多少个 0,记为高度hi。
用单调队列求出每个点左右两边第一个高度小于自身的点,记为 l3 , 𝑟6 ,则贡献为:
现在 n,m 非常大,而 C 很小,此类问题常规的方法就是离散。
对列离散非常轻松,几乎不需要变。
考虑连续一大段全 0 的行,如果li和ri 至少一个不是边界(0 和 m+1),则
是不会变的。如果都是边界(即i是高度最低的位置),则贡献是一个等差数列。

T5 小欧的烦恼
问题可以转化为求满足条件的最小代价的 c 使得 c | gcd(a, b)。 令 x = gcd(a, b),我们可以这样构建一个 x 个顶点的有向图。
顶点标号从 0 到 x-1,如果顶点 i 和顶点 j 满足 (i 10 + S_k) % x == j。 则连一条有向边(i, j),这条边代表当前使用 S_k。 然后就可以发现,题目等价于寻找一条从 u 到 0 的字典序最小的最短路径,并且该路
径的最后一条边需要使用 v。

T6 小H和圣诞树
我们考虑两种暴力:
标记某种颜色的点,进行树形 DP,求出每个点到标记点的距离之和; 对于某次询问,将两种颜色点的虚树建出来,在虚树上做类似的 DP;
那么我们可以分治,对所有点数大于某个 S 的颜色进行暴力 1 的预处理,然后我们发 现现在不能回答的询问都满足询问的两种颜色包含的点数都不超过 S,则可以使用暴力
我们在求虚树的过程中,排序可以使用预处理+归并排序,求 LCA 可以使用
O(NlogN)-O(1)的 RMQ 做法,这样我们令 S=SQRT(N),可以在 O(NSQRT(N))时空复杂度内 解决这道题。

其他疑问可加以下交流群(加入一个即可啦~)
牛客多校算法训练营1:453799454
牛客全国算法训练营2:330766563
牛客多校算法训练营3:934889305

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐