2019暑假正睿集训8.11day8题解及总结

本文深入探讨了算法竞赛中的策略与技巧,包括如何构造高效排列解决抽象代数问题,运用线段树和组合计数优化数据结构题目的解法,以及通过动态规划和区间覆盖策略解决组合计数题目。文章提供了详细的解析和代码实现思路。

T1 抽象代数题

真·构造题
100pts
  • ⾸先容易发现只要做到⼀个⽀持 [ 2 … n ] [2…n] [2n]循环移位和 ( 1 , 2 ) (1,2) (1,2)交换 的排列,就可以完成整个事情,即每次把待交换的数字放 到 1 1 1号位,然后把另⼀个数字放到 2 2 2号位,交换即可。

  • 但这样的时间复杂度是 O ( n 2 ) O(n^2) O(n2)级别的,因为要做很多次循 环移位操作。

  • 我们可以构造类似循环左移1位,3位,9位,27位这样的四 个排列,这样之后每次移位就可以期望不到4次快速完成, 假设期望是c次。

  • 但是对于交换⼀对数,直接写的话常数会⽐较⼤,⽐如说 将u移到1位置然后换到0位置,将v移到1位置然后和0位置 的u交换,然后u,v互换,再把0换回来。这样步数会是3cn级别,可以获得⼀些部分分。

  • 因为后⾯的数⼀直在循环移位,所以我们可以想保持他们 相对位置正确即可,所以我们假设要做的是使得后⾯的数 变成2,3,…, n的⼀个循环。

  • 所以对于1号位的数字,我们想做的是把它换到正确的相对 位置。

  • ⽐如说1号位是5,那么它正确的相对位置就是2后⾯的3 格,只需要把这个格⼦移到2号位,然后与1交换即可。

  • 如果1号位现在是1,并且后⾯仍然不是有序的,那么找到 ⼀个与位置不对的数字,然后将其换到1号位。

  • 这样⼦做期望步数是cn级别的,⼤概200次左右就可以完 成。

T2 数据结构题

真·计数题
50pts
  • 对于⼀个⼦集 s s s,它的⽅差 ( 元 素 的 平 ⽅ 和 / ∣ s ∣ ) − ( 元 素 和 的 平 ⽅ ) / ∣ s ∣ 2 (元素的平⽅和/|s|)-(元素和的平 ⽅)/|s|^2 (/s)()/s2

  • 通过⼀些常⻅的计数⽅法我们需要对每个元素以及每对元 素分别算贡献。

  • 对于⼀个元素 v v v,它前⼀部分是 v 2 ∗ s u m ( C ( n − 1 , k − 1 ) / k ) v^2 * sum(C(n-1,k-1)/k) v2sum(C(n1,k1)/k)

  • 对于⼀对元素 v [ i ] v[i] v[i], v [ j ] v[j] v[j],如果 i = j i=j i=j,那么它对答案的贡献是 v [ i ] ∗ v [ i ] ∗ s u m ( C ( n − 1 , k − 1 ) / k 2 ) v[i] * v[i] * sum(C(n-1,k-1)/k^2) v[i]v[i]sum(C(n1,k1)/k2)

    ​ 如果 i ≠ j i≠j i̸=j,那么它对答案的贡献是 v [ i ] ∗ v [ j ] ∗ s u m ( C ( n − 2 , k − 2 ) / k 2 ) v[i] * v[j] * sum(C(n-2,k-2)/ k^2) v[i]v[j]sum(C(n2,k2)/k2)

  • 所以说答案就是:

    数 字 平 ⽅ 和 ∗ ( s u m ( C ( n − 1 , k − 1 ) / k ) − s u m ( C ( n − 1 , k − 1 ) / k 2 ) + s u m ( C ( n − 2 , k − 2 ) / k 2 ) ) − 数 字 和 的 平 ⽅ ∗ s u m ( C ( n − 2 , k − 2 ) / k 2 ) 1 数字平⽅和 * (sum(C(n-1,k-1)/k)- sum(C(n-1,k-1)/k^2)+sum(C(n-2,k-2)/k^2))-数字和的平⽅ *sum(C(n-2,k-2)/k^2) 1 (sum(C(n1,k1)/k)sum(C(n1,k1)/k2)+sum(C(n2,k2)/k2))sum(C(n2,k2)/k2)1

100pts
  • 数字和的平⽅与数字平⽅和可以⽤线段树简单维护。

  • 怎么算?

  • $ C[n]=sum(C(n-1,k-1)/k)-sum(C(n-1,k-1)/k2)+sum(C(n-2,k-2)/k2))$

  • B [ n ] = s u m ( C ( n − 2 , k − 2 ) / k 2 ) B[n]=sum(C(n-2,k-2)/k^2) B[n]=sum(C(n2,k2)/k2)

  • 这是两个只与n有关的序列:

    s u m ( C ( n − 1 , k − 1 ) / k ) = s u m ( n − 1 ) ! / ( n − k ) ! / k ! = 1 / n sum(C(n-1,k-1)/k)=sum (n-1)!/(n-k)!/k!=1/n sum(C(n1,k1)/k)=sum(n1)!/(nk)!/k!=1/n s u m C ( n , k ) = ( 2 n − 1 ) / n sum C(n,k)=(2^n-1)/n sumC(n,k)=(2n1)/n

  • A [ n ] = s u m ( C ( n − 1 , k − 1 ) / k 2 − C ( n − 2 , k − 2 ) / k 2 ) ) = s u m ( C ( n − 2 , k − 1 ) / k 2 ) A[n]=sum(C(n-1,k-1)/k^2-C(n-2,k-2)/k^2))=sum(C(n-2,k-1)/k^2) A[n]=sum(C(n1,k1)/k2C(n2,k2)/k2))=sum(C(n2,k1)/k2)

  • A [ n ] = 1 / ( n − 1 ) ∗ s u m C ( n − 1 , k ) / k A[n]=1/(n-1) *sum C(n-1,k)/k A[n]=1/(n1)sumC(n1,k)/k,考虑. n A [ n + 1 ] − ( n − 1 ) A [ n ] = s u m C ( n − 1 , k − 1 ) / k nA[n+1]-(n-1)A[n]=sum C(n-1,k-1)/k nA[n+1](n1)A[n]=sumC(n1,k1)/k

  • s u m C ( n − 1 , k − 1 ) / k 2 sum C(n-1,k-1)/k^2 sumC(n1,k1)/k2可以⽤相同的⽅法推,所以A,B可以在 线性时间内求出

T3 组合计数题

50pts
  • 将所有区间按照右端点排序,依次考虑。
  • 实际上我们要记的是当前没有被选中且没有被覆盖的区间 的最⼩的右端点和选中的区间最⼤的右端点。
  • 每次考虑⼀个区间,如果选进来,就更新选中的区间最⼤ 的右端点,并且如果能覆盖没有被选中的最⼩右端点也可 以更新。
  • 否则就含是否被最⼤的右端点覆盖,如果有就覆盖,否则 更新最⼩右端点。
100pts
  • 这样的状态设计是 O ( n 3 ) O(n^3) O(n3)的不太好进⼀步分析,因此 令 l ( i ) l(i) l(i)表示 i i i前⾯最⼤的不能被i⽀配的点的下标, r ( i ) r(i) r(i)表示 i i i后⾯ 的最⼩的。
  • 虽然每个点可能会覆盖某个⼦集,但是我们只需要考虑 l ( i ) + 1 , … , r ( i ) − 1 {l(i)+1,…, r(i)-1} l(i)+1,,r(i)1这个区间即可。
  • 对于更右边的点,如果能被 i i i覆盖,那么也⼀定能被覆盖 r ( i ) r(i) r(i) 的点覆盖。问题就变成有⼀堆线段,选⼀个⼦集使得并是全集。
  • 考虑 d p [ i ] [ j ] dp[i][j] dp[i][j]表示考虑前 i i i个区间,最后⼀个没有被覆盖的位置 是 j j j
  • 那么从 d p [ i ] dp[i] dp[i]转移到 d p [ i + 1 ] dp[i+1] dp[i+1]就是⼀个前缀*2,然后区间加。
  • 所以可以⽤线段树解决。

今日总结

1.上午改了之前没过的几道题的正解,看大佬的题解,理解思路后自己写代码,收获还是很大的。

2.下午把上午模拟赛的题写了,实在不会打的就听讲解,跟着老师的思路写题。有些题完全想不到正解那个方向,只会很暴力的暴搜,实在是很无奈。不过每天都是有收获吧。

3.写了篇FFT的博客写了一天(昨天学了一晚上终于学会了orz)。写博客还是有好处的,至少之前可能一知半解的内容发现了不足后找各种资料学习,基本上都理解了。

内容概要:本文系统研究了全桥LLC谐振变换器的脉冲频率调制(PFM)控制策略,深入剖析其拓扑结构与工作原理,涵盖全桥逆变电路、谐振回路(Lr、Cr、Lm)、变压器及整流滤波电路的功能与协同机制。文章详细分析了变换器在不同开关频率下的三种工作模式(fs > fr、fs = fr、fm < fs < fr),阐明了其在感性区域实现原边零电压开通(ZVS)和副边零电流关断(ZCS)的软开关特性。重点阐述了PFM控制通过调节开关频率来改变谐振阻抗,从而稳定输出电压的基本原理,并论证了其在高效率(尤其轻载时)、低电磁干扰(EMI)和宽输入输出范围方面的显著优势。研究构建了基于Matlab/Simulink的完整仿真模型,对系统的稳态性能、动态响应(负载突变)和效率进行了全面仿真验证,结果证实PFM控制能有效实现输出电压的精确稳定,具备优良的动态响应能力和全负载范围内的高效率。最后,文章总结了PFM策略的有效性,并展望了结合自抗扰控制(ADRC)等先进算法优化控制性能及开展硬件实验验证的未来发展方向。; 适合人群:具备电力电子、自动控制或相关领域基础知识的研究生、科研人员及从事高性能电源设计的工程技术人员。; 使用场景及目标:①深入理解LLC谐振变换器的拓扑结构、工作模式划分及其软开关物理机制;②掌握PFM控制策略的设计思想、参数整定方法及其在提升电源转换效率与降低EMI中的核心应用;③为开发高效率、高可靠性的开关电源(如通信电源、服务器电源)提供理论依据、仿真建模指导与性能优化的技术参考。; 阅读建议:在阅读时应紧密结合文中给出的仿真模型框图与关键波形,重点精读工作模式分析与PFM控制原理部分,建议动手复现仿真以深刻体会频率调节对增益和效率的影响规律,并特别关注轻载效率表现,同时思考未来展望中提及的先进控制算法融合方向,以激发创新研究思路。
内容概要:本文系统介绍了基于Matlab的多架无人机编队控制与轨迹规划技术实现方案,聚焦于一致性分布式控制、多领航者架构、编队跟随控制及轨迹跟踪等核心算法的建模与仿真。通过Matlab代码实现了多无人机系统的编队形成、保持与动态调整,并融合RRT、人工势场法、粒子群优化(PSO)、Q-learning等智能算法,完成复杂环境下的路径规划与避障任务。文档还深入探讨了滑模控制、反步法、模型预测控制(MPC)等多种先进控制策略在无人机协同中的应用,展现了系统在动态干扰和不确定环境下的鲁棒性与自适应能力。配套提供的完整Matlab代码涵盖多种编队模式与控制算法对比案例,支持二次开发与性能验证。; 适合人群:具备自动控制理论基础和Matlab编程能力的科研人员、研究生及从事无人机系统开发的工程技术人员,尤其适用于研究多智能体协同控制、分布式编队与自主路径规划方向的专业人士。; 使用场景及目标:① 实现多无人机在复杂动态环境中的高效协同飞行与稳定编队;② 解决队形切换、轨迹实时优化与动态障碍物规避等关键问题;③ 为学术研究、毕业设计或实际工程项目提供可复现的算法框架与仿真平台支持; 其他说明:文中所有Matlab仿真代码可通过指定百度网盘链接下载,建议结合仿真运行深入理解算法细节,并根据具体应用场景进行参数调优与算法拓展。
内容概要:本文研究基于动态非合作博弈的大规模电动汽车实时优化调度决策方法,通过构建博弈论模型刻画电动汽车用户间的竞争行为,利用Matlab实现算法仿真与求解。研究将复杂的充电调度问题建模为动态非合作博弈形式,分析各电动汽车作为理性个体在电网负荷、电价及用户偏好等多重约束下的最优充放电策略,实现去中心化、分布式的实时调度优化。结合动态博弈理论与电力系统运行特性,文章深入探讨了纳什均衡的存在性、唯一性及迭代求解的收敛性,并通过仿真实验验证该方法在平抑电网负荷峰值、降低用户用电成本、提升可再生能源消纳能力以及增强电网运行稳定性方面的综合效益。; 适合人群:具备博弈论、优化理论、电力系统基础及相关数学建模能力,从事智能电网、电动汽车调度、能源互联网、车网互动(V2G)等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于大规模电动汽车接入背景下的实时需求响应与分布式调度系统设计;②为电力公司制定动态电价机制、激励策略及负荷管理政策提供理论依据与技术支持;③促进车网互动技术的实际落地,推动新型电力系统中用户侧资源的高效协同与优化利用; 阅读建议:读者应结合提供的Matlab代码深入理解模型构建与算法实现细节,重点关注博弈模型的效用函数设计、约束条件处理、均衡求解过程及仿真参数设置,建议使用真实或模拟数据进行复现与拓展实验,以全面掌握其应用逻辑与优化潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值