\(\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. Mac安装Docker

    一.下载 从官网下载速度太慢,推荐在阿里云镜像下载. 下载地址:http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/stable/D ...

  2. openresty操作mongodb

    最近项目中使用openresty,需要通过openresty连接mongo,经过几番折腾终于有了一个结果,现将其记录下来,也感谢模块提供者 使用openresty操作mongo 1.引入第三方的模块 ...

  3. php日志分割

    为了方便查看php错误日志信息,将php的日志按照时间进行分割,器脚本如下 phpPid='/usr/local/webserver/php-5.3.27/var/run/php-fpm.pid' p ...

  4. RT-Thread Studio刚新建工程后直接打开main.c编译就board.c里产生报错,解决办法

    如题,RT-Thread Studio刚新建工程后直接打开main.c编译就产生报错. 具体为:刚新建了一个stm32F407ZGT6和一个STM32F103RCT6的工程,之后啥代码也没有改,直接打 ...

  5. 关于Requests交互超时的处理方式

    拿 https://aes.cryptohack.org/ecb_oracle 这道题来做示范. 由于这个链接的本地服务器在外国,因此我们很容易就会连接超时. 如下一个脚本: import reque ...

  6. ubuntu的apt源更新后只能装php8新版本,无法安装php7老版本了

    新电脑更新apt源以后,发现新装的都是php8.1,而且apt源update后,search也找不到php7了. 于是找到了这篇文章 然后按照他说的做 sudo apt-get update sudo ...

  7. JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE!

    Memcach什么是Memcache Memcache集群环境下缓存解决方案 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式 ...

  8. 面向 Java 开发人员的 Scala 指南: 构建计算器,第 1 部分

    Scala 的 case 类和模式匹配 Ted Neward, 主管, Neward & Associates 简介: 特定于领域的语言已经成为一个热门话题:很多函数性语言之所以受欢迎,主要是 ...

  9. python项目依赖管理之poetry

    poetry,是一个强大的Python项目依赖管理工具,旨在简化和优化项目的依赖管理过程.它提供了一种简单且一致的方式来定义.安装和管理项目所需的依赖项.本文将详细介绍poetry库的安装方法.使用方 ...

  10. Linux之查看开放端口

    在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型.物理端口指的是物理存在的端口,如ADSL Modem.集线器.交换机.路由器上用 于连接其他网络设备的接口,如RJ-45端口.SC端口等等 ...