2024集训D11总结

news/2024/12/24 20:22:55/文章来源:https://www.cnblogs.com/youlv/p/18628653

集训D11总结

模拟赛总结

T1

题意

\(k\) 个大小为 \(s_i\) 的连通块 , 用 \(k-1\) 条边联通 , 设 \(d_i\) 为第 \(i\) 个连通块的度数 ( 只考虑连的 \(k-1\) 条边 ) . 每种连边方案的权值为 \(\prod\limits_i d_i\) , 求所有方案的权值和 .

题解

这个性质看一眼就能联想到经典的图联通方案数 . 形式是 :

\[n^{k-2}\prod s_i \]

其证明来源于 prüfer 序列 . 考虑用一种用边联通方案的基础上 , 每个连通块情况是与连通块大小有关的 . 考虑枚举度数 .

总度数是 \(2k-2\) , 为了得出在指定度数时的方案数 , 可以用 prüfer 序列 , 加 \(k\) 条边 , 则表示这 \(k\) 条边的序列长度为 \(k-2\) , 每个连通块内点出现次数是 \(d_i-1\) . 连通块内部总共有 \(s^{d_i}\) 种情况 . 即 :

\[\begin{align}\sum \limits_{d(d_i\ge1)} \begin{pmatrix} k-2\\ d_1 -1,d_2-1\cdots d_k-1 \end{pmatrix} \prod \limits_i s^{d_i} \end{align} \]

为了化简这个形式 , 应用多项式定理 , 需要换元 \(t_i=d_i-1\) .则 :

\[\begin{align*} 原式&= \prod \limits _i s_i\times \sum \limits_{t(t_i\ge0)} \begin{pmatrix} k-2\\ t_1 ,t_2\cdots t_k \end{pmatrix} \prod \limits_i s^{t_i} \\ &=\prod \limits _i s_i\times (\sum \limits_i s_i)^{k-2}\\&=n^{k-2} \prod \limits _i s_i \end{align*} \]

发现这个公式的推导过程和度数紧密相连 .

这道题方案本身有权值 , 不能套结论 , 但是权值与度数有关 , 考虑回到枚举度数那一步 , 要求的就是 :

\[\begin{align}\sum \limits_{d(d_i\ge1)} \begin{pmatrix} k-2\\ d_1 -1,d_2-1\cdots d_k-1 \end{pmatrix} \prod \limits_i s_i^{d_i}\times d_i! \end{align} \]

在这个式子基础上 , 直接转向对度数做背包 ( 对 prufer 序列 dp 侧重于研究形态 , 不适合这道题 ) .

首先把这个多重集排列数拆了 , 发现能消掉一些东西 :

\[\begin{align} 原式&= \frac {(k-2)!}{\prod (d_i-1)!} \prod \limits_i s_i^{d_i}\times d_i! \\&=(k-2)! \ \times \prod s_i^{d_i} \times d_i \end{align} \]

\((k-2)!\) 单独提出来做系数 , 剩下的部分可以背包 . 总度数为 \(2k-2\) , 设 \(f_{i,j}\) 为考虑到第 \(i\) 个连通块 , 已经用了 \(j\) 个度数时的权值 , 转移为 :

\[f_{i,j}=\sum \limits _{k=1}^{j} f_{i-1,j-k} \times k \times s_i^k \]

这个背包是 \(n^3\) 复杂度的 , 可以拿到 40 分 .

考虑优化 , 看起来类似前缀和优化比较有前途 , 考虑快速转移 . 先考虑 \(s_i=1\) 的部分分 , 可以得到启发 :

\[f_{i,j}=\sum \limits _{k=1}^{j} f_{i-1,j-k} \times k \\ f_{i,j+1}=f_{i-1,j}+\sum \limits _{k=1}^{j} f_{i-1,j-k} \times (k+1) \]

从前一个到后一个除了插入了 $f_{i-1,j} $ 这一点外 , 相当于整体 \(k\to k+1\) , 可以维护 \(sum=\sum \limits _{k=1}^{j} f_{i-1,j-k}\) , 实现快速转移 .

再考虑一般情况 , 发现没有本质区别 , 每次更新时多需要 \(\times s_i\) 一次 , 用同样方法维护即可 .

总结

比较基础的一道题 , 只要知道 prufer 这个事情基本上就能把 \(n^3\) 写出来 , 然后几乎可以很确定正解是在这个基础上优化 , 又因为转移是多项式的 , 想到类前缀和优化 , 这个问题就解决了 . 甚至可以转 FFT , 也能解决 .

但是被卡常了 , 其实很没道理 , 本来常数不应该特别大 . 为了正确性稳妥就没写 \(\frac{1}{2}\)常数 . 事实说明还是在稳妥前提下上满优化比较好 .

T2

题意

把排列 \(A\) 划分成两个非空排列 \(B\) , \(C\) , 最大化 \(B\) 前缀最大值和 \(C\) 前缀最小值的和 .

题解

直接从考场最后半个小时突然想通的地方开始考虑 .

考虑这个问题类似于找出两条不交的上升子序列和下降子序列 , 但是是有去别的 . 区别在于这里每个元素必须放进去 .

考虑向前者转化 , 在一些情况下 , 可以通过把元素放入某条序列使得它不对当前局面产生任何影响 . 称递增序列为 \(B\) , 递减序列为 \(C\) , 当前元素在 \(C\) 上方可以放入 \(C\) , 在 \(B\) 下方可以放入 \(B\) . 因此只有它在 \(B,C\) 中间位置时肯定会对当前状态产生影响 .

到这里发现已经有一个子问题解决了 !

根据刚才的分析 , 只要 \(B,C\) 之间交叉 , 就可以任意地选择一个元素是否放入 \(B/C\) 或者等效于不放 , 因此如果遇到了交点 , 可以直接通过预处理倒序的上升/下降子序列得出答案 .

因此问题剩下前一半 : 如何维护 \(B,C\) 不交的情况 ?

显然这一部分中难办的是夹在 \(B,C\) 中间的元素 , 无论放在 \(B/C\) 都必然会改变 \(B/C\) 的值域 . 利用这一特点 , 可以发现考虑到 \(i\) 时且尚未相交时 , \(B,C\) 事实上划分了 \([1,i]\) 里元素的值域 , 中间存在元素是不合法的 , 因此可行的 \(B/C\) 只有 $O(值域) $ 种 , 枚举每一种情况 , 都是可以对 \(B,C\) 分别统计方案数的 , 可以获得 \(O(n^2)\) 做法 .

考虑优化 , 发现值域上维护的信息在每次加入新元素时改变并不大 , 考虑用数据结构维护每一段上的信息 . 具体地 , 维护每一段在 \([1,i]\) 已经选中的 \(ans\) , 左端点对应在 \([i+1,n]\) 上的最长上升子序列 , 右端点对应在 \([i+1,n]\) 上的最长下降子序列 . 这里都可以用线段树维护 , 考虑 \(i\) 动时维护的上升/下降子序列会有影响 , 可以直接把每个值对应的后缀序列挂在线段树点上 , 每个点的贡献就是线段树的一个前缀/后缀 , 可以在查询时处理 .

总结

在 11:30 时突然从向原序列找两条子序列这里获得了启发 , 思路推到了 \(n^2\) 这里 , 并且大致意识到了应该数据结构维护是可行的 , 但是写不完 , 还是保了​一下 \(n^3\) . 场后发现这个思路几乎和题解思路重合 , 但是写的时候很艰难 , 这种处理区间信息的边界问题太多了 .

似乎有更加易于实现的思路 .

思路还是在场上生成出来了 , 但是慢了一步 . 同时是从一个发散的处理无用点的角度出发的 . 事实上是尝试转化时探出了正确的思路 . 场上积极转化意义确实非常重大 , 不可能所有题一开始的转化就切中正确方法 , 关键是足够发散 , 启发性地向有可能解决问题的方向探索 . 还要重点抓住通过研究得到的接近**本质 **, 简洁 , 明确的思路 .

T3

题意

设数列 \(P=\{1,1,2,2,2,3,3,3,3,4,4,4,4,4\cdots\}\) , 其中 \(i\) 出现 \(i+1\) 次 . 设数列 \(Q\) 为 :

\[Q(1)=1 \\ Q(i)=Q(i-1)+Q(P(i)) \]

\(T\) 次求 \(Q(n)\) , \(T\le10^4,n\le10^{40}\) .

题解

首先有一个 \(n\le10^{10}\) 的部分分是理应拿到的 , 同时只有这一部分不会超出 __int128 .

前 20 分 , \(10^7\) 的部分可以直接打表 .

\(10^{10}\) , 考虑 \(P(n)=O(\sqrt n)\) , 优先想办法向根号方向优化 , 发现 \(P(i)\) 相同的一段相当于是等差数列 , 抓住这一点 , 可以考虑暴力跳段 , 每段的数值可以 \(O(1)\) 计算 , 单次复杂度根号 .

进一步优化 , 可以预处理每一段首项 , 每次二分出来在哪一个段 , 配合打出来的 \(10^7\) 的表就可以了 .

考虑正解 , 显然单纯根号不合适 , 这时需要一些稳定 decreasing 的方案 .

仍然从 \(P(i)\) 有效值只有 \(\sqrt n\) 种出发 , 构造 \(Q(P(i))-Q(P(i-1))\) 的形式来缩减有效计算量 . 意义是这样构造可以通过转化式子维持连续 \(Q(i)\) 的形式 , 同时缩小规模 :

\[\begin{aligned} Q(n)&=\sum\limits_{i=1}^nQ(P(i)) \\&=\sum (F^0(i)-F^0(i-1))Q(P(i)) \\&=F^0(n)Q(P(n)) -\sum F^0(i-1)\times (Q(P(i))-Q(P(i-1)) \end{aligned} \]

其中 \(f^0=1,F^0=x\) , 是构造出来的辅助函数 .

后半部分可以化为 :

\[\sum\limits_{i=1}^{P(n)}F^0(\frac{i(i+1)}{2}-1)Q(P(i)) \]

前后两部分都得到了我们想要的 , 把规模化到了 \(P(n)\) , 同时保证了 \(Q(P(i))\) 这个形式不变 .

为了向下递归 , 定义 \(f^d=F^{d-1}(\frac{i(i+1)}{2}-1)\) , 这样向后递归的部分也可以类似地处理了 .

大约层数为 \(4\) 时 , 规模就很小了 , 可以直接计算 . 多项式用插值算 . 需要高精 .

总结

从实用以及自己水平来讲 , 能稳定保证 40 分 , 而且不浪费过多时间更重要 . 显然 \(10^{10}\) 是分水岭 , 前半部分是 \(\sqrt n\) 可行的部分 , 可以通过预处理等等简单解决 , 而后部分必然需要decrease递归 , 没有思路的前提下确实应该跳 .

看懂题解做法后 , 感觉构造还是比较巧妙 , 但是理解不了这种思路如何生成 , 不透彻 . 或许是值得以后回顾的题 .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858325.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防重复点击处理

方法注册: 调用:

P9017 [USACO23JAN] Lights Off G

前言 困了一下午, 仅仅只搞懂了个大概, 我们赶紧把这些题补了, 冷静一点 思路 观察大样例可以发现, 答案好像都不大 容易证明的是先用最多 \(n\) 次关闭所有开关, 然后在 \(2n\) 次打开每个灯, 这样一定不超过 \(3n\) 次就可以成功的打开所有灯 那么我们考虑以这个为突破口, 枚…

物联网数据处理-iris数据集(鸢尾花)

物联网数据处理-iris数据集(鸢尾花) 大作业题目读入 iris.txt 里的鸢尾花数据,不考虑标签信息(标签是用来监督学习用的,这里是无监督),利用 PCA(减少噪声,利于可视化) 将数据从 4 维降成 2 维 之后,进行以下操作:利用不同的方式构建邻接矩阵(高斯核,k-临近等)(…

基于扩频解扩+turbo译码的64QAM图传通信系统matlab误码率仿真,扩频参数可设置

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要该通信系统主要用于图像传输,适用于对图像质量和传输可靠性要求较高的场景,如无人机图像传输、视频监控、无线电视广播等。在复杂的电磁环境…

SIP协议中与Dialog相关的概念

如下RFC文档所述:在SIP协议中,对话(Dialog)是由两个用户代理(User Agent,简称UA)之间持续一段时间的端到端关系,通过Call-ID、To-tag和From-tag来标识(即Dialog ID),用于对一个会话(Session)进行信令交互。对话代表一个上下文场景,据此来阐释相关的SIP消息(即一系…

HBuilderX运行到微信开发者工具

HBuilderX运行到微信开发者工具

快手MARM 文章理解

阅读了快手的论文 MARM,论文中的算法 符号看起来不容易理解。 对照图自己研究了下, 理解了。需要知道为什么(b) 和(c) 中 的中间结果是相同的。需要知道 masked-self-attention缓存是怎么处理,看箭头快手 MARM: Unlocking the Future of Recommendation Systems through Mem…

NSSCTF--Crypto--[CISCN 2023 初赛]badkey

NSSCTF Crypto [CISCN 2023 初赛]badkey[CISCN 2023 初赛]badkey task: from Crypto.Util.number import * from Crypto.PublicKey import RSA from hashlib import sha256 import random, os, signal, stringdef proof_of_work():random.seed(os.urandom(8))proof = .join([ra…

deque容器/构造函数/赋值操作/大小操作/插入和删除/数据存取/排序

deque容器基本概念 功能: 双端数组,可以对头端进行插入删除操作 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低 deque相对而言,对头部的插入删除速度会比vector块 vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:…

CSS基础-长度单位

💖简介 在CSS中,长度单位分为绝对长度单位和相对长度单位。这些单位用于定义元素的尺寸、边距、填充、字体大小等属性值 vmin和vmax是CSS中的相对长度单位,它们基于视口(viewport)尺寸来定义元素的宽度或高度。这些单位使得元素的尺寸可以根据视口的大小进行缩放,从而有…

基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN

1.算法运行效果图预览 (完整程序运行后无水印) filePath =Test_data\悲伤1.wav类型:悲伤 识别置信度Vmax =0.9559 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)Labsn = []; % 遍历每种情绪 for i = 1:length(Em_kind)Labs0…