CF1307(模拟赛记录)

news/2024/9/22 3:34:57

比赛页面

偶然发现一道做过的 G;C 的罚时:没开 longlong,谨记。

然后一个小时没想出 E ……


E 题面:

在一年成功的牛奶生产后,Farmer John 奖励他的奶牛们它们最喜欢的美味的草。

在田里有 \(n\) 个单位的排成一行的草,每个单位的草有甜味 \(s_i\)。Farmer John 有 \(m\) 头奶牛,每只都有最喜欢的甜味 \(f_i\) 和饥饿值 \(h_i\)。他想要在奶牛选取两个不相交的子集,分别在这行草的左侧和右侧排成一列。注意两边站多少奶牛是无关紧要的。奶牛会按以下方式被喂:

  • Farmer John 会按照指定的顺序依次喂奶牛。
  • 在奶牛被喂的时候,它会径直从一端走向另一端,一路上把甜味 \(s_i\) 和它喜爱的甜味 \(f_i\) 相同的草吃掉。
  • 当它恰好吃了 \(h_i\) 单位的草,它会立即在原地停止不动并睡觉,这会使得其它奶牛无法通过这个位置(不论来自哪一侧)。
  • 如果一个奶牛遇到了一个睡着的奶牛或者它走到了整行草的最末尾都没有吃饱,那么它就会变得沮丧。Farmer John 绝对不想让任何奶牛变得沮丧。

注意草不会长回来。并且为了防止奶牛沮丧,Farmer John 不必保证喂了所有奶牛。

惊人的是,Farmer John 已经发现睡着的奶牛是最满足的。如果 Farmer John 安排的最优。求出最多的睡着的奶牛数,并求出在此情况下有多少种左右两侧奶牛的方案 Farmer John 可以选择(对 \(10^9+7\) 取模)。只要这个方案存在一种顺序使得能不让奶牛沮丧即可,Farmer John 具体如何安排是无关紧要的。

\(n,m\le 5000\)


赛时一直执着于 "牛的终止位置应该递减"、"同口味的牛不能一起出现" 并依次 DP,根本没有想到在口味的集合固定的时候,排列的顺序也是固定的;同时也同样只想着按照草的口味顺序枚举,根本没有想到枚举左边队列的终止位置。
在一个错误的思路上越走越深,以至于完全没有想着回头尝试一下别的方向。

下面是 E 的正解。

注意到草的口味之间是独立的:当决定了集合里包含哪些牛之后,牛的排列顺序只有一种(这代表不需要乘以某个贡献了)。这启发我们把口味之间分开看,不论每个口味内部选出了怎么样的牛,总能找到且仅有一种排列顺序是合法的。
考虑枚举左边的牛最右到达的位置 \(i\),则右边的牛最左只能走到 \(i+1\)
先考虑口味 \(s_i\),左边必须有一头口味是 \(s_i\) 的牛吃到 \(i\) 刚好吃饱;同时右边口味是 \(s_i\) 的牛必须在到达 \(i\) 之前就吃饱。

预处理 \(pfx[i][j]\) 表示 \(s_1\sim s_i\) 里有多少个 \(j\)\(suf[i][j]\) 表示 \(s_i\sim s_n\) 里有多少个 \(j\)。用它们可以推出 \(cnt[i][j]\) 表示口味是 \(i\) 且饥饿度 \(\le j\) 的牛个数。

则左边恰好能吃到 \(i\) 吃饱的牛方案数是 \(l=cntp[s_i][pfx[s_i][i]]-cntp[s_i][pfx[s_i][i]-1]\),右边合法的牛数量是 \(r=cnts[s_i][suf[s_i][i+1]]-[suf[s_i][i+1]\ge pfx[s_i][i]]\),减去是因为如果这样就代表从右边进牛的可能包含了所有左边进牛的可能,所以左边一定会消耗掉右边的一头牛的可能性,在这里提前减去这一头被左边用掉的牛。

如果 \(l=0\),说明不可行;否则如果 \(r=0\),只有左边能进牛,也就是会多一头睡觉的牛,同时这头牛有 \(l\) 中可能。
\(l>0,r>0\),左右两边都能进牛,就会多两头睡觉的牛,同时有 \(l\times r\) 种可能。

再考虑其他口味 \(j\),左边的方案数是 \(l=cnt[j][pfx[j][i]]\),右边的方案数是 \(r=cnt[j][suf[j][i+1]]\),注意这里左边必须进牛已经在口味 \(s_i\) 那里进过了,所以右边不用再减。

如果 \(l=0\),说明不可行;否则如果 \(r=0\),只有左边能进牛,也就是会多一头睡觉的牛,同时这头牛有 \(l\) 中可能。
\(l>0,r>0\),左右两边都能进牛,就会多两头睡觉的牛,同时有 \(l\times r\) 种可能。

以上就是对一个固定的分界点 \(i\) 的处理,对于所有分界点 \(i\),取能睡觉的牛最多的,把方案数累加即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/57429.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

学习记录-“unknown type name ‘HAL_StatusTypeDef’ ”报错

1:conf.h中用到的外设宏定义打开 2:#include "stm32g4xx_hal.h"放在最开头 如果有其他解决方法请增加

【待做】【Linux系列】使用fail2ban配置动态防火墙

一、安装二、测试三、基本配置四、相关命令原创 戒一双 LINUX开源玩家前面说的防火墙基本是静态的情况,在实际运行中我们可能需要动态调整防火墙策略,此时可以考虑使用Fail2ban。 Fail2ban 可以通过创建规则,自动更改防火墙配置,在尝试登录失败达到一定次数后禁止特定 IP,…

焦煤波浪 跌势快要结束了

如果走出这个形态 下周看止跌 开始震荡

洛谷 P5658 [CSP-S2019] 括号树

洛谷 P5658 [CSP-S2019] 括号树 题意 给定一棵树,每个点有一个括号 ( 或 )。 定义 \(s_i\) 表示 根节点到 \(i\) 每个点的括号组成的序列。 求每个 \(s_i\) 中合法括号子串的个数 \(f_i\)。 思路 定义 \(g_i\) 表示 \(s_i\) 中以 \(i\) 结尾的合法括号子串的个数。 有 \(f_i=f…

运输问题数学模型精解

运输问题(Transportation Problem)是运筹学中的经典问题之一,其历史可以追溯到19世纪中期。该问题最早由数学家和经济学家提出,目的是解决如何在需求和供给之间分配资源以最小化运输成本的问题。运输问题的数学模型最初由俄国数学家卡尔库尔肖夫(Karl Kulshov)在19世纪提…

CF1534(模拟赛记录)

比赛页面ABCD 都打的可以,然而 E 的 +10 直接葬送了大概率过的 F1 …… 先猜了个 \(n-k+1\) 的结论,但是没有写搜索查正确性(事实上确实不正确),于是两次罚时,第一次是交互格式错了。 然后又猜了个 \(\min(n-k+1,(n-1)/(k-1))\) 的结论,过了几个小的搜索数据(\(n\le 6\…

简单比较 http https http2,我们要如何把http升级为https

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣http 超文本传输​​协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的。 HTTP遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求…

作业二:个人项目

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 10Estimate 估计这个任务需要多少时间 300Development 开发 150Analysis 需求分析 (包括学习新技术) 50Design Spec 生成设计文档 10Design Review 设计复审 20Coding Standard 代码规…