\(\mathscr{Summary}\)

  状态还行叭。

  A 题又犯坏习惯,走起来就大力分讨,上了个厕所之后冷静一下开始寻找比较普适性的 DP 状态,然后几乎就切掉了,可惜复杂度写假了没发现(已经预处理过的前缀和一个一个加,笑死)。

  B 题的解法暗示性很强,随便猜一个结点出来套路性 DFS 树就好,比较迅速。

  C 题骗的时候就走得有点偏,问题没有抽象清楚,虽然有暴力分,但和正解毫不相关。这个正解确实太神奇了。

\(\mathscr{Solution}\)

\(\mathscr{A}-\) Sequence

  给定 \(n,k,m,\{a_m\}\),\(\{a_m\}\) 的值域是 \(U=[1,k]\cap\mathbb N\)。定义值域也是 \(U\) 的序列 \(\{b_n\}\) 是好的,当且仅当它存在一个长度为 \(k\) 的子序列不含重复元素。求在所有的 \(\{b_n\}\) 中,\(\{a_m\}\) 作为连续子序列的出现次数。

  \(m\le n\le2.5\times10^4\),\(k\le400\)。


  首先,光是 \(\{a_m\}\) 就能让 \(\{b_n\}\) 合法的情况直接判了。

  出现次数,还允许重复,\(n\) 也不大,所以先直接枚举出现位置。设现在 \(\{a_m\}\) 左边还能加 \(l\) 个元素,右边还能加 \(r\) 个元素。注意到若 \(\{a_m\}\) 包含重复元素,左边和右边出现合法段(使 \(\{b_n\}\) 合法的段)的情况是互不影响的,不可能存在跨过 \(\{a_m\}\) 的合法段。稍微抽象一下可以得到这样一个 DP 问题:

  给定一个确定的,长度为 \(j\) 的子序列 \(\{c_j\}\),在其后面添加 \(i\) 个元素,使得 \(\{c'_{i+j}\}\) 合法,我们记这样的添加方案数为 \(f(i,j)\),特别地,\(f(i,k)=k^i\)。转移显然有

\[f(i,j)=(k-j)f(i-1,j+1)+\sum_{t=1}^jf(i-1,t).
\]

可以 \(\mathcal O(nk)\) 得到。两边方案数小小容斥一发就能求到 \(\{a_m\}\) 包含重复元素时的方案。

  不包含重复元素,注意到此时 \(m<k\le400\),所以可以大力钦定几个位置让它出现重复,规约到前一种情况。具体地,设在 \(\{a_m\}\) 前面添加了第 \(i~(i+m\le k)\) 个元素时,这个元素与它后面的第 \(j\) 个重复,且前 \(i-1\) 个元素都没有产生重复。枚举此处的 \(i,j\),在这种情况下,令 \(\{t_{i+m}\}\) 表示添加得到的序列,那么其最长不重复前缀长度为 \(p=j\),最长不重复后缀长度为 \(q=i+m-1\),结合已经枚举的 \(l,r\),此处方案数为

\[+f(l-i,p)k^r+f(r,q)k^{l-i}-f(l-i,p)f(r,q),
\]

注意 \(i-1\) 个不产生重复的元素还会产生 \((k-m)!/(k-m-i+1)!\) 的系数,记得乘上。

  现在算法复杂度是 \(\mathcal O(nk^2)\),优化很显然:上式对 \(j\) 求和的部分可以滚前缀和。因此最终复杂度为 \(\mathcal O(nk)\)。

\(\mathscr{B}-\) Graph

  给定含有 \(n\) 个结点 \(m\) 条边的强连通有向图,若 \(u\) 到任意结点 \(v\) 都有且仅有一条简单路径,则称 \(u\) 是好的。求出所有好的结点 \(u\)。

  多测,\(\sum n\le10^5\),\(\sum m\le2\times10^5\),保证每个图中至少有 \(20\%\) 的好点。


  判 \(u\) 好不好:DFS 一遍,每个访问到的已被遍历过的结点都必须在当前的递归栈内。

  从 \(20\%\) 的条件入手,不要白不要嘛,随便猜几次得到一个好点 \(r\)。这个“好”字对 \(r\) 的限制非常强,分析一下可知:\(r\) 为根的 DFS 树唯一,且仅存在外向树边和返祖边。

  以此为基础,判断其他结点的好不好。对于 \(u\neq r\),如果 \(u\) 子树内包括两条及以上到 \(u\) 严格祖先的返祖边,显然 \(u\) 不好;否则 \(u\) 子树内必然存在恰好一条到 \(u\) 严格祖先的返祖边(图强连通),如果这个祖先好,\(u\) 就好,否则 \(u\) 就不好。画画图比较明显。

  DFS 一遍求出最浅返祖边和次浅返祖边,再 DFS 一遍判断即可。复杂度 \(\mathcal O(\sum m)\)。

\(\mathscr{C}-\) Shape

  Cov. 「CF 1290F」Making Shapes; my solution.

Solution Set -「LOCAL」冲刺省选 Round I的更多相关文章

  1. Solution Set -「LOCAL」冲刺省选 Round XXV

    \(\mathscr{Summary}\)   读错题了读错题了 B 题差点没做出来真的太吓人了.   逆序开题,C 题直接冲一发暴力最大权闭合子图居然过了.A 题确实一下子没想到用"可能的 ...

  2. Solution Set -「LOCAL」冲刺省选 Round XXIV

    \(\mathscr{Summary}\)   名副其实的 trash round,希望以后没有了.   A 题算好,确实一个比较关键的简化状态的点没想到,所以只拿了暴力(不考虑 \(\mathcal ...

  3. Solution Set -「LOCAL」冲刺省选 Round XXIII

    \(\mathscr{Summary}\)   有一说一,虽然我炸了,但这场锻炼心态的效果真的好.部分分聊胜于无,区分度一题制胜,可谓针对性强的好题.   A 题,相对性签到题.这个建图确实巧妙,多见 ...

  4. Solution Set -「LOCAL」冲刺省选 Round XXII

    \(\mathscr{Summary}\)   和出题人很有缘分但是没有珍惜.jpg   A 题有一个显然的二维偏序斜率式,以及显然的 CDQ 套李超树 \(\mathcal O(n\log^2n)\ ...

  5. Solution Set -「LOCAL」冲刺省选 Round XXI

    \(\mathscr{Summary}\)   省选几个小时啊,怎么模拟赛只打三个小时啊./kk   时间安排较为合理,没有出现严重的因思考时间过少引起的丢分.   A 题比较可惜,二分 + 点分治大 ...

  6. Solution -「LOCAL」过河

    \(\mathcal{Description}\)   一段坐标轴 \([0,L]\),从 \(0\) 出发,每次可以 \(+a\) 或 \(-b\),但不能越出 \([0,L]\).求可达的整点数. ...

  7. Solution -「LOCAL」画画图

    \(\mathcal{Description}\)   OurTeam.   给定一棵 \(n\) 个点的树形随机的带边权树,求所有含奇数条边的路径中位数之和.树形生成方式为随机取不连通两点连边直到全 ...

  8. Solution -「LOCAL」充电

    \(\mathcal{Description}\)   给定 \(n,m,p\),求序列 \(\{a_n\}\) 的数量,满足 \((\forall i\in[1,n])(a_i\in[1,m])\l ...

  9. Solution -「LOCAL」二进制的世界

    \(\mathcal{Description}\)   OurOJ.   给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...

  10. Solution -「LOCAL」大括号树

    \(\mathcal{Description}\)   OurTeam & OurOJ.   给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...

随机推荐

  1. JS 通过后台接口返回的URL地址下载文件并保存到本地(已在项目中使用,保存音视频文件)

    今天做antdV表格勾选下载操作时,因为粗心大意碰到了下载问题,特此记录~ 一.单个文件下载逻辑代码如下: const exportFile = (data, fileName, _this)=> ...

  2. 秒懂Redis

    一.redis简介 Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库.缓存.消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库 二.Re ...

  3. python开发包之远程隧道链接sshtunnel

    缘起: 公司很多的数据库的链接都是本地连接或者指定ip地址可以访问, 如果你没有该ip权限, 但是你可以登录该数据库所在的服务器, 这个时候就可以使用ssh链接上这个服务器,以此为跳板进行数据库的链接 ...

  4. SSL免费证书之Let’s Encrypt

    官网:https://letsencrypt.org/zh-cn 官网建议使用Certbot的方式进行安装,所以首先我们需要安装Certbot Certbot) 官网:Certbot (eff.org ...

  5. BUU get_started_3dsctf_2016

    先checksec一下 32位程序,没开PIE,再观察一下主函数 gets函数有可能是栈溢出,再观察一下后门函数 方法一: 考虑栈溢出后直接跳转到if判断后面的语句,进而跳过if条件判断 from p ...

  6. 从Delphi到Lazarus——Lazarus开发环境使用入门教程

    0.前言 曾经有过更换开发环境体验的编程爱好者都会有同样的感受:打开新更换的开发环境后,看到陌生的界面无从下手.想写一段小程序试一试,却你找不到自己需要的组件在哪里. 其实,我们每到一个新地方,首先要 ...

  7. windows安装gitbook并部署发布到openEuler欧拉服务器

    1. 安装nodejs10 下载安装nvm https://github.com/coreybutler/nvm-windows/releases/download/1.1.9/nvm-setup.e ...

  8. Centos7.8安装Gitlab

    公司为了合规性考虑,需要自己搭建私有化版的github.那不用想,肯定要上GitLab了. 项目背景: 服务器:华为云ECS,需要上公网,并在安全组打开80端口访问. 用户:关闭公开注册,新建用户后, ...

  9. 数据万象盲水印 - AIGC的“保护伞”

    导语 近期AIGC的爆火让人们觉得AI似乎无所不能,打工人们已然将 AI 发展成了工作的一大助手,但同样也伴随着很多AI的受害者.一些专家.画家.学者们发现自己的"作品风格"正在被 ...

  10. nexus如何上传自己的依赖包

    一.创建第三方包仓库创建第三方jar包的仓库选用hosted 取名为nexus-3rd 然后再public组中加入nexus-3rd,交给public管理 二.创建用户仓库创建完成以后可以创建一个管理 ...