Codeforces Round 621 (Div. 1 + Div. 2)

USACO入侵CF

A. Cow and Haybales

题意:

一行 n 个数,每次可以将 1 从一个数移动到相邻的数,求 d 次内 a1 最大值。

思路:

显然先移动 a2,然后依次类推。

提交记录

B. Cow and Friend

题意:

在二维平面上,一次只能走恰好 a1an 中的一个数,求从原点走到 (x,0) 的最少步数。

思路:

首先不难发现,如果非常远,我们肯定是先走最长的知道比较近。

所以我们先不断走最长的知道距离小于等于其两倍,这时候我们肯定可以再走两步到达,但是我们要判断现在有没有一步到的方案,如果有就一步到。

提交记录

C. Cow and Message

题意:

一个字符串的一个子序列如果下标是等差数列就是好的。求一个子序列使得其作为好的子序列出现次数最多,求最多出现次数。

|s|105

思路:

不难发现,如果子序列长度大于等于 3 一定不会更好,因为前两个就够了,所以我们只用判断所有长度为 12 的即可,精细实现可以做到 O(26n)

提交记录

D. Cow and Fields

题意:

给定一张无向连通图和若干个特殊点,要求在特殊点之间加一条边,使得加边之后最短路最长。

n2×105

思路:

不妨设 ai 表示 1i 的最短路,bi 表示 in 的最短路,我们就是要在特殊点中选两个点使得 min{ai+bj,bi+aj} 尽可能大。

但是有个最小值不好处理,我们考虑令 xi=aibi,这样最小值变成 bi+bj+min{xi,xj},按照 x 排序就好了。

提交记录

E. Cow and Treats

题意:

有一行 n 块草场,si 表示其类型。

m 头奶牛,fi 表示其最喜欢的草场类型,hi 表示其饥饿程度。

一种划分只两个不交集合 A,BA,B 中的奶牛交替吃草,每次 A 中从左边出发,B 中从右边出发,一头牛只吃自己喜欢的类型,会一直吃到 hi 然后在当前各自睡觉。如果一头牛吃不够或者碰到了睡觉的牛,那么他会很伤心。

一个划分是好的当且仅当没有奶牛很伤心。

求所有的好的划分使得 |A|+|B| 最大以及方案数。

n,m5000

思路:

我们首先发现其实只要 f 不同其实并不影响。所以我们考虑同一个 f

显然最多选两个,一个放左边,一个放右边。

那么现在只要分出两个集合,并且前面的和后面的不相交即可。内部的排序方案是唯一且存在的。

我们考虑枚举分界点,为了不重不漏,我们要求前 k 个属于 A 且第 k 个有奶牛睡觉。

我们对于每一种类型单独讨论,不妨设 ai 表示奶牛在左边是睡觉的位置,bi 表示奶牛在右边时睡觉的位置。

如果选一个,则需要前 k 个中有 ai 或者后面有 bi,如果有 2 个,则就是前面选乘上后面选。

我们用前缀和维护,但是如果 ai<bi,则计算 k[ai,bi) 时都会计入,但这是不合法的,我们可以用差分处理然后减去即可。

但是我们有一个要求 k 必须选,我们发现其实只关系一种颜色,且考虑到 h,f 不同时相同,所以我们就特判一下,选一个就只有一种方案,选两个就看一下是否有 bi>k 即可。

时间复杂度 O(n2),但是离散化一下其实可以做到 O(nlogn)

提交记录

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