CSP-S 2023 题解

密码锁

发现总状态数只有 \(10^5\) 个,枚举 \(O(n)\) 暴力判断即可,复杂度 \(O(10^5 n)\)。

或者每一个状态只对应了 \(81\) 个状态,枚出来,取交集即可,复杂度 \(O(81 n)\)。

消消乐

好的,来一波抽象做法 QwQ

我看到这道题的第一眼:这不就是 QOJ 6504 Flower's Land 2 吗。

于是考虑对每一个元素赋一个矩阵 \(M_i\),奇偶分开赋正逆矩阵,例如 aaa 就为 \(M_a, M_a^{-1}, M_a\) 或者 \(M_a^{-1}, M_a, M_a^{-1}\)。

于是一个区间合法当且仅当 \(\prod M_i = I\),这可以考虑矩阵满足结合律,但是不满足交换律。

其实换成任意一种满足结合律,但是不满足交换律的东西来都可以维护。

暴力枚举是不可取的,考虑前缀和,则合法当且仅当 \(pre_r \times pre_{l - 1}^{-1} = I\)。

考虑两边同时乘上 \(pre_{l - 1}\),那么合法当 \(pre_r = pre_{l - 1}\)。

于是用一个桶或者 map 记录一下数量即可求出答案,注意需要开 long long

如果是 \(2 \times 2\) 的矩阵,求逆的话就别用高斯消元了,推一下式子即可得到:

\[\begin{pmatrix}
a & b \\
c & d \\
\end{pmatrix}
\begin{pmatrix}
\frac 1 a + \frac {bc} {a (ad - bc)} & \frac b {bc - ad} \\
\frac {-c} {ad - bc} & \frac a {ad - bc}
\end{pmatrix} = I
\]

或者可以用自逆矩阵,但我声称那没必要。

代码:云剪贴板 - 洛谷


然而这还不够优秀,(其实可以另开炉灶),我们基于矩阵继续优化。

其实不难发现,对于一个合法的区间,\(\prod M_i\) 可以被划分为若干个合法区间。

如果我们使得每一个合法区间最小,那么划分可以证明是唯一的。

例如 abbacddc 就可以分为 abbacddc 两个区间。

于是对于每一个 \(i\),考虑找到最后一个 \(pre_i = pre_j\) 的 \(j\) 记为 \(t_i\)。

我们考虑如何快速的递推求出 \(t_i\)。

如果我们已经求出了 \(t_{i - 1}\),也就是 \(\prod_{t_{i - 1} \le k \lt i} M_i = I\) 那么对于 \(i\) 来说,我们需要找到前面的某一个 \(j\) 使得。

发现 \(t_i - i\) 这个区间一定形如 \(x (某合法串) \cdots (某合法串) x\),于是初始答案为 \(x = t_{i - 1}\),我们不断的跳 \(t_{x - 1}\) 直到 \(S_x = S_i\) 为止,那么此时一定满足 \(t_i - i\) 是合法的且是最小的,利用神秘复杂度分析可以得知这就是 \(O(n |\Sigma|)\) 的。

最后 \(O(n)\) 的扫一遍,记 \(f_i\) 表示以 \(i\) 结尾的合法串的个数,\(f_i = 1 + f_{t_i - 1}\),答案为 \(\sum f_i\)

代码在剪切板底部:云剪贴板 - 洛谷

结构体

超级模拟,利用 object id 完成模拟即可。

只是注意 addrfix 与对应的 align

种树

显然二分答案,然后考虑如何检查。

发现可以快速的求解出最晚能放置的时间 \(f_x\),由于树形结构存在依赖,考虑 \(O(n)\) 的更新一次:\(f_x = \min(f_x, \min_{y \in Son(x)}f_y - 1)\)。

然后将 \(f_x\) 排序,存在合法的操作序列当且仅当 \(\forall i, i \le f_i\)。

现在就可以得到一个 \(O(\log V (n \log V + n \log n))\) 的抽象做法了(我的考场做法,还跑得挺快,自测数据用了 500ms)

其实可以 \(O(n)\) 的判断,优化如下:

可以发现树生长的过程是一段一次函数和一段二次函数,那么将断点预处理一下,每次可以 \(O(1)\) 的求解一个方程,解出最晚能放置的时间 \(f_x\),这部分就是 \(O(n)\) 的了。

发现合法的序列只需要判断 \(\le n\) 的部分即可,因为对于 \(f_i \ge n\) 的时候存在 \(i \le n \le f_i\),一定满足条件。

所以可以开一个 \(O(n)\) 的桶,前缀和一下数量 \(c_i\),满足 \(\forall i, c_i \le i\) 即合法,这样就可做到 \(O(n)\)。

于是得到了一个 \(O(n \log V)\) 的优秀做法。

CSP-S2023 题解的更多相关文章

  1. 2019 CSP J/S第2轮 视频与题解

    CSP入门组和提高组第二轮题解 转自网络

  2. 上午小测3 T1 括号序列 && luogu P5658 [CSP/S 2019 D1T2] 括号树 题解

    前 言: 一直很想写这道括号树..毕竟是在去年折磨了我4个小时的题.... 上午小测3 T1 括号序列 前言: 原来这题是个dp啊...这几天出了好几道dp,我都没看出来,我竟然折磨菜. 考试的时候先 ...

  3. [CSP模拟测试43、44]题解

    状态极差的两场.感觉现在自己的思维方式很是有问题. (但愿今天考试开始的一刻我不会看到H I J) A 考场上打了最短路+贪心,水了60. 然而正解其实比那30分贪心好想多了. 进行n次乘法后的结果一 ...

  4. 题解 nflsoj489 【六校联合训练 CSP #15】小D与随机

    题目链接 考虑枚举好点的集合.此时要考虑的问题是如何填入\(1\sim n\)这些数使得恰好我们枚举到的这些点是好点,即:求出有多少种合法的填数方案. \(1\)号点一定是好点.那么除\(1\)号点外 ...

  5. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  6. CCF计算机职业资格认证考试题解

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF计算机职业资格认证考试题解 CCF计算机软件能力认证(简称CCF CSP认证)是CCF计算机职业资格认证系 ...

  7. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  8. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

  9. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  10. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

随机推荐

  1. SnakeYaml反序列化分析

    前言 SnakeYaml是Java中解析yaml的库,而yaml是一种人类可读的数据序列化语言,通常用于编写配置文件等.yaml真是到哪都有啊. 环境搭建 <dependency> < ...

  2. 【Oracle】使用PL/SQL快速查询出1-9数字

    [Oracle]使用PL/SQL快速查询出1-9数字 简单来说,直接Recursive WITH Clauses 在Oracle 里面就直接使用WITH result(参数)即可 WITH resul ...

  3. 力扣326(java)-3的幂(简单)

    题目: 给定一个整数,写一个函数来判断它是否是 3 的幂次方.如果是,返回 true :否则,返回 false . 整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x 示例 1: 输 ...

  4. PeLK:101 x 101 的超大卷积网络,同参数量下反超 ViT | CVPR 2024

    最近,有一些大型内核卷积网络的研究,但考虑到卷积的平方复杂度,扩大内核会带来大量的参数,继而引发严重的优化问题.受人类视觉的启发,论文提出了外围卷积,通过参数共享将卷积的复杂性从 \(O(K^{2}) ...

  5. 使用Databricks+Mlflow进行机器学习模型的训练和部署【Databricks 数据洞察公开课】

    简介: 介绍如何使用Databricks和MLflow搭建机器学习生命周期管理平台,实现从数据准备.模型训练.参数和性能指标追踪.以及模型部署的全流程. 作者:李锦桂   阿里云开源大数据平台开发工程 ...

  6. 网关流控利器:结合 AHAS 实现 Ingress/Nginx 流量控制

    ​简介:微服务的稳定性一直是开发者非常关注的话题.随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战. 作者:涂鸦 微服务的稳定性 ...

  7. 超详攻略!Databricks 数据洞察 - 企业级全托管 Spark 大数据分析平台及案例分析

    简介: 5分钟读懂 Databricks 数据洞察 ~ 更多详细信息可登录 Databricks 数据洞察 产品链接:https://www.aliyun.com/product/bigdata/sp ...

  8. dotnet 6 修复找不到 EnumeratorToEnumVariantMarshaler 问题

    我将在一个 .NET Framework 项目升级到 dotnet 6 时发现构建不通过,因为原先的代码使用到了 EnumeratorToEnumVariantMarshaler 类型,在 dotne ...

  9. dotnet 6 精细控制 HttpClient 网络请求超时

    本文告诉大家如何在 dotnet 6 下使用 HttpClient 更加精细的控制网络请求的超时,实现 HttpWebRequest 的 ReadWriteTimeout 功能 本文将介绍如何在 Ht ...

  10. EXCEL-统计sheet个数、统计指定单元格个数

    Excel的函数,可以直接在里面执行 1.统计sheet个数 =SHEETS() 参考:https://office.tqzw.net.cn/excel/excel/8168.html 2.统计单元格 ...