码迷,mamicode.com
首页 > 其他好文 > 详细

Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2) 题解

时间:2021-05-03 12:22:46      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:alt   否则   lazy   表示   codeforce   优先队列   http   pcc   red   

竟然上 GM 了,incredible(

A

首先如果 \(2050\nmid n\) 那显然就 \(-1\) 了,否则答案显然为 \(\dfrac{n}{2050}\) 的各位数字和。

B

显然这个最小值就是全部 \(nm\) 个数中最小的 \(m\) 个数之和,用个优先队列什么的维护一下即可,时间复杂度 \(nm\log m\)

C

zszz 凭我们的猜结论大法可知答案唯一存在并且每次往左往下走即可构造出答案。

D

首先们知道对于一个点而言,最优走法肯定是先走 \(\dfrac{k}{2}\) 步使得花费最小,然后原路返回。
因此考虑设 \(dp_{i,j,t}\) 为从 \((i,j)\) 出发走 \(t\) 步的最小花费,转移就枚举下一步到达的点随便更新一下即可,最后的 \(ans_{i,j}=dp_{i,j,k/2}\times 2\)

E

这个题还稍微有点意思,而且我上 GM 还要多亏了这道题拉开手速的差距啊(
首先特判掉全是 P 的情况,这个贡献显然为 \(1\)
一个 observation 是如果 P 的连续段个数 \(\ge 2\),那么第一个 C 的位置显然只可能是第 \(1\) 个或者第 \(2\) 个,否则前两个都是 P,而 P 的连续段个数 \(\ge 2\),因此这两个连续段之间的间隔 \(\ge 2\),大于前两个 P 之间的距离 \(1\),不符合条件。
这样就可以分情况讨论了,如果第一个 C 的位置 \(\ge 3\),那 P 只可能形成一个连续段,不难发现合法的排列方式只可能形如 PPP...PPCCC...CC,也就是说 P 是一段前缀,C 是一段后缀,枚举前缀长度随便算算即可。
如果第一个 C 的位置 \(\le 2\),那么手玩一下也可以发现合法的排列方式只可能形如 (P)CCC...CCPCPCPCPP...P(C) 枚举前面一段 C 的长度然后二分一下 CPCPCPCPC...PC 的长度即可。
所以说这个 \(\bmod 998244353\) 是假的(

F

这个题现场就差一点点没想出来啊啊啊!要是现场切掉了说不定涨的就不是 \(147\) 分而是 \(247\) 分甚至更多了(白 日 做 梦
首先看到这种最大值的期望时通常考虑容斥,这题也不例外,考虑设 \(f_i\) 表示团的大小 \(\le i\) 的概率,那么这个概率等价于将全部 \(n\) 个点染成黑白两种颜色,使得以每个点为中心,半径为 \(i\) 的区域中都至少包含一个白点。
这又可以进一步转化:对于所有白点,到其距离 \(\le i\) 的区域的并集刚好包含了整棵树。
这个概率可以通过树形 \(dp\) 求出,我们记 \(dp_{i,j}\) 表示对于 \(i\) 子树中的点,若 \(j\ge 0\)\(i\) 上方深度最浅的被覆盖的点离 \(i\) 的距离为 \(j\) 的概率,否则表示 \(i\) 子树中深度最深的未被覆盖的点离 \(i\) 的距离为 \(-j-1\) 的概率,考虑转移,假设我们合并 \(dp_u\)\(dp_v\),其中 \(u\)\(v\) 的父亲,那么考虑两个值 \(dp_{u,i}\)\(dp_{v,j}\),如果 \(i+j\ge 0\) 那么显然它可以覆盖全部 \(u\) 的子树,并且还能再向上覆盖 \(\max(i,j-1)\) 层,否则 \(i\) 子树中深度最深的未被覆盖的点离 \(i\) 的距离为 \(\min(i,j-1)\)。按照树形背包的套路转移即可,初始值 \(dp_{u,-1}=dp_{u,i}=\dfrac{1}{2}\)
时间复杂度 \(\mathcal O(n^3)\)

G

看数据范围有点像网络流,事实上此题的的确确是网络流,考虑什么样的四个点能够组成题目中所说的平行四边形,我们将坐标系划分成一个个 \(2\times 2\) 的网格,下记:

  • 横纵坐标都是偶数的点为 \(0\) 类点
  • 横坐标为奇数,纵坐标为偶数的点为 \(1\) 类点
  • 横坐标为偶数,纵坐标为奇数的点为 \(2\) 类点
  • 横纵坐标都是奇数的点为 \(3\) 类点

那么将网格图做这样的划分后,可能的平行四边形有以下情况(这里蒯了 George1123 的图):

技术图片

不难发现这样的平行四边形一定存在一条路径包含四类点的边,并且起点一定是 \(1\) 号点,终点一定是 \(3\) 号点,即 \(1\to 0\to 2\to 3\),并且这显然是组成题目所说的平行四边形的充要条件。
故考虑在相邻的 \((1,0),(0,2),(2,3)\) 点之间连边,然后拆点跑最小割即最大流即可。

Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2) 题解

标签:alt   否则   lazy   表示   codeforce   优先队列   http   pcc   red   

原文地址:https://www.cnblogs.com/ET2006/p/Codeforces-1517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!