CF1941场题解

Rudolf and the Ticket

算法:枚举。

题意简述:从 a 数组中和 b 数组中各选出一个数,使得它们的和不超过 k,求选法数量。

考虑直接枚举每一种可能的搭配即可。

Rudolf and 121

算法:贪心。

题意简述:定义一次操作为,该位置上的数减去 2,其前一个和后一个位置(必须存在)上的数都减去 1。问能否把数组中所有数变成 0

我们对 2n1 的所有位置尝试操作,最后查看每个位置是否都为 0 即可。

Rudolf and the Ugly String

算法:贪心。

题意简述:定义丑字符串为含有子串 map 或子串 pie 的字符串。现在可以多次选择一个位置并更改这个位置的字母,求把一个字符串变成不丑的字符串的最小操作数。

考虑换掉 mappie 里的字母 p 即可。

Rudolf and the Ball Game

算法:模拟。

题意简述:有 m 次传球,每次可能会沿着环顺时针或者逆时针传 k 个人,现在已知初始持球人和部分次的传球方向,问最后可能持球的人都有谁。

考虑对于每一次操作进行传递,如果遇到重复的传递直接返回,看传到最后一步有多少人能拿球即可。判重可以使用记忆化搜索。

Rudolf and k Bridges

算法:动态规划,前缀和。

题意简述:在所有的行中选出连续的 k 行建造桥墩,每个位置建造都有一个代价。要求这些行的第一列和最后一列必须建造,且相邻的桥墩距离不超过 d。问建造所有桥墩的最小代价。

考虑设 fj 表示每一行最后一个桥墩建造在 j 的最小代价,发现朴素转移是平方的,但是可以使用单调队列优化,于是求出每一行的最小代价,然后用前缀和求出最小代价的连续 k 行即可。

转移式:fj=min(fj,fl+ai,j+1),需满足 j,l 距离不超过 k

Rudolf and Imbalance

算法:二分。

题意简述:给定 a,b,c 三个数组,要求选出至多一对 (i,j) 然后将 bi+cj 插入进 a 中。要求最小化从小到大排序后的 a 相邻两项的差的最大值。

考虑答案要么是第二大的差,要么是最大的差想办法砍成最优的两半,于是先线性求出这些东西。然后对于每一项 b,在 c 中二分找出最优的与 b 匹配的那一项(事实上可能会有两项),然后尝试更新答案。

Rudolf and Subway

算法:图论。

题意简述:给一个无重边无自环的无向图,每条边有一个颜色。现在给出 s,t,求 st 最少要经过多少条不同颜色的边。

考虑对于每条有向边(拆开的无向边),连边 uc 边权为 1cv 边权为 0,然后直接使用 0/1bfs 求最短路即可。注意颜色不要和点的下标相同。

代码

posted @   zxh923  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示