首页 > 其他分享 >CF1307(模拟赛记录)

CF1307(模拟赛记录)

时间:2024-09-06 20:15:02浏览次数:3  
标签:奶牛 记录 进牛 左边 CF1307 Farmer 口味 John 模拟

比赛页面

偶然发现一道做过的 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\),取能睡觉的牛最多的,把方案数累加即可。

标签:奶牛,记录,进牛,左边,CF1307,Farmer,口味,John,模拟
From: https://www.cnblogs.com/FLY-lai/p/18400862

相关文章

  • 2024.9.6 模拟赛
    A对于一个子矩阵\((x_1,y_1),(x_2,y_2)\),其元素和为\(\sum_{i=x_1}^{x_2}\sum_{j=y_1}^{y_2}S_i\cdotS_j=(\sum_{i=x_1}^{x_2}S_i)(\sum_{j=y_1}^{y_2}S_j)\),\(O(n^2)\)枚举一下\(S\)的所有子区间的和放进一个桶里再检验一下即可。即对于一个子区间和为\(S_1\),需要累加和......
  • CF1534(模拟赛记录)
    比赛页面ABCD都打的可以,然而E的+10直接葬送了大概率过的F1……先猜了个\(n-k+1\)的结论,但是没有写搜索查正确性(事实上确实不正确),于是两次罚时,第一次是交互格式错了。然后又猜了个\(\min(n-k+1,(n-1)/(k-1))\)的结论,过了几个小的搜索数据(\(n\le6\))的,大一点的没跑,于......
  • 2024.9.6 CF1307 模拟赛记录
    A:各捆干草间互相独立,所以优先移动距\(1\)近的。点击查看代码#include<bits/stdc++.h>#defineintlonglong#definepsbkpush_back#definefstfirst#definescdsecond#defineumapunordered_map#definepqueuepriority_queue#definevcvector#defineendl'\n'......
  • Git使用经验总结6-删除远端历史记录
    删除远端的历史记录但是不影响最新的仓库内容是笔者一直想实现的功能,有两个很不错的用处:有的历史提交不慎包含了比较敏感的信息,提交的时候没注意,过了一段时间才发现。这个时候已经有了很多新的历史提交,无法再回退了。有时候会拿Git仓库存储代码文件以外的内容,比如美术资源、依......
  • C语言——使用回调函数模拟实现qsort
    同学们还记得之前我们已经学过一种排序方法叫“冒泡排序“嘛。代码直接附上咯voidbubble_sort(intarr[],intsz){ inti=0;//趟数 for(i=0;i<sz-1;i++) { intj=0; for(j=0;j<sz-i-1;j++) { if(arr[j]>arr[j+1]) { inttmp=......
  • 『模拟赛』CSP-S模拟1
    Rank1BADA.喜剧的迷人之处在于签。正好早上还在改一个要分解质因数的题,所以一眼就出思路了。首先将\(a\)的平方因子全部除去,剩下的就是\(b\)必须的因数,即若设将平方因子全部除去后的\(a\)为\(a'\),则\(b\)应表示为\(a'\timesx^2\),从\(L\)这个下界开始只用找......
  • 使用flask进行Mock Server模拟接口操作及问题解决
    1.flask介绍flask是一个轻量级的pythonweb微框架2.MockServer介绍MockServer是一个开源的模拟服务器,它可以定义和记录API交互,支持各种http方法(get、post、put、delete),可以自定义响应内容,例如返回静态文件可以使用flask来搭建一个mock模拟服务3.模拟接口先安装flaskpip......
  • 秋招/春招投递公司记录表格
            最近在准备秋招,在各个平台投递秋招简历,什么官网,邮箱,boss,应届生各个平台上,投递的平台比较多,比较乱,因此自己想将这些平台投递记录都收集到一个表格上,所以在腾讯文档上自己做了一个表格,用来记录秋招在各个平台上的简历投递这个是整体预览图1、公司名称   ......
  • Luogu8990 做题记录
    link比较喜欢的题目。考虑合法的条件,从点亮的灯的角度难以维护。反过来看,从未点亮的灯角度考虑,条件相当于这些灯形成了一个包含\(1\)号灯的连通块。如何判定这些灯形成一个连通块?点减边!设\(c_i\)为操作前\(i\)次后,未点亮的灯的\(|V|-|E|\)的值,那么\(c_i=1\)即合......
  • 2024年9月26日记录网站安全性配置优化
    1、修改apache配置httpd.conf文件 #关闭trace-methodTraceEnableoff#隐藏Apache版本信息ServerSignatureOffServerTokensProductOnly2、修改网站配置文件,不允许777目录执行任何可执行脚本<VirtualHost*:801>ServerNamewww.website.comServe......