Codechef October Challenge 2019 Division 1 solutions

本文深入探讨了算法竞赛中的策略,包括如何快速识别和解决问题,如ChefandMaximumStarValue、ArrayModification、EvenEdges等,提供了高效的算法实现思路和时间复杂度分析。
Chef and Maximum Star Value

显然如果一个数后面有它的因数,那么它一定不可能是最大值。先从后往前枚举一遍把这些数去掉,再从前往后做一遍,每个数枚举它所有倍数统计即可。
因为每个数最多只会做一次,时间复杂度是 O ( T A i log ⁡ A i ) O(TA_i\log A_i) O(TAilogAi)

代码

Array Modification

考虑每次遍历对于每一对 ( a , b ) (a,b) (a,b) 的影响:
( a , b ) → ( a   x o r   b , a ) → ( b , a   x o r   b ) → ( a , b ) (a,b)\rightarrow (a~xor~b, a)\rightarrow (b,a~xor~b)\rightarrow (a,b) (a,b)(a xor b,a)(b,a xor b)(a,b)
所以判下总共会有几次完全遍历 0 0 0 n − 1 n-1 n1,再把剩下的做一次就可以了。
要特判 i = n − i − 1 i = n-i-1 i=ni1 的情况。
时间复杂度 O ( T N ) O(TN) O(TN)

代码

Even Edges

对于 k ≥ 4 k\geq4 k4 的情况,如果某 2 2 2 组点间有偶数条边,那么显然可以将它们合并。如果所有组之间都是奇数条边,那么任意选出 4 4 4 组合并成 1 1 1 组,这一组的边数也是偶数。
因此 k ≤ 3 k\le 3 k3
m m m 为偶数时显然 k k k 即为 1 1 1
否则,若原图中有一个点度数为奇数,将它隔离后剩下的点的边数即为偶数,于是 k = 2 k=2 k=2
而若原图中所有点度数都为偶数,那么无论怎么隔离出一组点,其与剩下的点间的边数一定是偶数,所以不可能 2 2 2 组点内部的边数都为偶数。此时 k = 3 k=3 k=3
至于 k = 3 k=3 k=3 时求出一个合法的答案,只需要找出一条边 ( u , v ) (u,v) (u,v) u u u v v v、剩下的点各成一组即可。

代码

Bacterial Reproduction

对于非叶子节点 u u u,它某个祖先 v v v t 0 t_0 t0 时刻的操作对它在 t 1 t_1 t1产生影响的条件是 t 1 = t 0 + d u − d v t_1=t_0+d_u-d_v t1=t0+dudv,即 t 1 − d u = t 0 − d v t_1-d_u=t_0-d_v t1du=t0dv
如果 u u u 是叶子节点,就变为 t 1 − d u ≥ t 0 − d v t_1-d_u\geq t_0-d_v t1dut0dv
那么离线之后遍历一遍树,记录下这些值就好了。
时间复杂度 O ( N + Q ) O(N+Q) O(N+Q)

代码

Queries on Matrix

假设最终有 r r r 行被加了奇数次, c c c 列被加了奇数次,那么最终为奇数的格子数是 r ( m − c ) + c ( n − r ) r(m-c)+c(n-r) r(mc)+c(nr),因此可以算出有哪些 ( r , c ) (r,c) (r,c) 满足条件。
对于每对 ( r , c ) (r,c) (r,c),显然可以分开计算行和列的方案数,最后再乘起来。
以行为例,问题转化为用 1 − n 1-n 1n Q Q Q 个位置,使得恰好有 r r r 个数的出现次数为奇数。这个可以用生成函数做,答案即为
( x 1 ! + x 3 3 ! + x 5 5 ! + . . . ) r ( 1 + x 2 2 ! + x 4 4 ! + . . . ) n − r ( n r ) Q !   [ x Q ] ({x\over 1!}+{x^3\over 3!}+{x^5\over 5!}+...)^r(1+{x^2\over 2!}+{x^4\over 4!}+...)^{n-r}{n\choose r}Q!~[x^Q] (1!x+3!x3+5!x5+...)r(1+2!x2+4!x4+...)nr(rn)Q! [xQ]
( e x − e − x 2 ) r ( e x + e − x 2 ) n − r ( n r ) Q !   [ x Q ] ({e^x-e^{-x}\over 2 })^r({e^x+e^{-x}\over 2 })^{n-r}{n\choose r}Q!~[x^Q] (2exex)r(2ex+ex)nr(rn)Q! [xQ]
( ∑ i = 0 r e ( 2 i − r ) x ( − 1 ) r − i ( r i ) ) ( ∑ j = 0 n − r e ( 2 j − n + r ) x ( n − r j ) ) 1 2 n ( n r ) Q !   [ x Q ] (\sum_{i=0}^re^{(2i-r)x}{(-1)^{r-i}}{r\choose i})(\sum_{j=0}^{n-r}e^{(2j-n+r)x}{n-r\choose j}){1\over {2^n}}{n\choose r}Q!~[x^Q] (i=0re(2ir)x(1)ri(ir))(j=0nre(2jn+r)x(jnr))2n1(rn)Q! [xQ]
先枚举 i + j i+j i+j :
( ∑ s = 0 n e ( 2 s − n ) x ∑ i = 0 s ( − 1 ) r − i ( r i ) ( n − r s − i ) ) 1 2 n ( n r ) Q !   [ x Q ] (\sum_{s=0}^ne^{(2s-n)x}\sum_{i=0}^s{(-1)^{r-i}}{r\choose i}{n-r\choose s-i}){1\over {2^n}}{n\choose r}Q!~[x^Q] (s=0ne(2sn)xi=0s(1)ri(ir)(sinr))2n1(rn)Q! [xQ]
f ( n , r , s ) = ∑ i = 0 s ( − 1 ) r − i ( r i ) ( n − r s − i ) f(n,r,s)=\sum_{i=0}^s{(-1)^{r-i}}{r\choose i}{n-r\choose s-i} f(n,r,s)=i=0s(1)ri(ir)(sinr)
( ∑ s = 0 n e ( 2 s − n ) x f ( n , r , s ) ) 1 2 n ( n r ) Q !   [ x Q ] (\sum_{s=0}^ne^{(2s-n)x}f(n,r,s)){1\over {2^n}}{n\choose r}Q!~[x^Q] (s=0ne(2sn)xf(n,r,s))2n1(rn)Q! [xQ]
( ∑ s = 0 n ∑ i = 0 ∞ ( 2 s − n ) i x i i ! f ( n , r , s ) ) 1 2 n ( n r ) Q !   [ x Q ] (\sum_{s=0}^n\sum_{i=0}^{\infin} {(2s-n)^ix^i\over i!}f(n,r,s)){1\over {2^n}}{n\choose r}Q!~[x^Q] (s=0ni=0i!(2sn)ixif(n,r,s))2n1(rn)Q! [xQ]
( ∑ s = 0 n ( 2 s − n ) Q f ( n , r , s ) ) 1 2 n ( n r ) (\sum_{s=0}^n(2s-n)^Qf(n,r,s)){1\over {2^n}}{n\choose r} (s=0n(2sn)Qf(n,r,s))2n1(rn)
现在的问题就是对每个 n , r n,r n,r,如何快速求出 f ( n , r , s ) f(n,r,s) f(n,r,s) s = 0... n s=0...n s=0...n 的值。
因为
f ( n , r , s ) = ( x − 1 ) r ( x + 1 ) n − r   [ x s ] f(n,r,s)=(x-1)^r(x+1)^{n-r}~[x^s] f(n,r,s)=(x1)r(x+1)nr [xs]
可以先预处理出 ( x − 1 ) k , ( x + 1 ) k ( k = 0... n ) (x-1)^k,(x+1)^k(k=0...n) (x1)k,(x+1)k(k=0...n),然后对每个 ( n , r ) (n,r) (n,r) NTT 乘一遍得到 ( x − 1 ) r ( x + 1 ) n − r (x-1)^r(x+1)^{n-r} (x1)r(x+1)nr,于是就可以求出 f ( n , r , s ) f(n,r,s) f(n,r,s) s = 0... n s=0...n s=0...n 的值。
然后发现还是 T 了…
那么不妨再进一步,预处理出 ( x − 1 ) k , ( x + 1 ) k ( k = 0.. n ) (x-1)^k,(x+1)^k(k=0..n) (x1)k,(x+1)k(k=0..n) 对在做 NTT 时每个可能的 m = 2 i m=2^i m=2i 的 NTT 后的多项式,这样就可以在做每对 ( n , r ) (n,r) (n,r) 时少做 2 2 2 次 NTT 。
然后就卡过去了。
时间复杂度 O ( n 2 log ⁡ 2 n + T n 2 log ⁡ n ) O(n^2\log^2 n+Tn^2\log n) O(n2log2n+Tn2logn)

代码

Faulty System

挖坑

【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度(下)—MPS动态调度(Matlab代码实现)内容概要:本文档围绕“基于配电网韧性提升的应急移动电源预配置和动态调度”主题,重点介绍MPS(Mobile Power Sources)动态调度的Matlab代码实现,是SCI一区论文复现的技术资料。内容涵盖在灾害或故障等极端场景下,如何通过优化算法对应急移动电源进行科学调度,以提升配电网在突发事件中的恢复能力与供电可靠性。文档强调采用先进的智能优化算法进行建模求解,并结合IEEE标准测试系统(如IEEE33节点)进行仿真验证,具有较强的学术前沿性和工程应用价值。; 适合人群:具备电力系统基础知识和Matlab编程能力,从事电力系统优化、配电网韧性、应急电源调度等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于复现高水平期刊(SCI一区、IEEE顶刊)中关于配电网韧性与移动电源调度的研究成果;②支撑科研项目中的模型构建与算法开发,提升配电网在故障后的快速恢复能力;③为电力系统应急调度策略提供仿真工具与技术参考。; 阅读建议:建议结合前篇“MPS预配置”内容系统学习,重点关注动态调度模型的数学建模、目标函数设计与Matlab代码实现细节,建议配合YALMIP等优化工具包进行仿真实验,并参考文中提供的网盘资源获取完整代码与数据。
一款AI短视频生成工具,只需输入一句产品卖点或内容主题,软件便能自动生成脚本、配音、字幕和特效,并在30秒内渲染出成片。 支持批量自动剪辑,能够实现无人值守的循环生产。 一键生成产品营销与泛内容短视频,AI批量自动剪辑,高颜值跨平台桌面端工具。 AI视频生成工具是一个桌面端应用,旨在通过AI技术简化短视频的制作流程。用户可以通过简单的提示词文本+视频分镜素材,快速且自动的剪辑出高质量的产品营销和泛内容短视频。该项目集成了AI驱动的文案生成、语音合成、视频剪辑、字幕特效等功能,旨在为用户提供开箱即用的短视频制作体验。 核心功能 AI驱动:集成了最新的AI技术,提升视频制作效率和质量 文案生成:基于提示词生成高质量的短视频文案 自动剪辑:支持多种视频格式,自动化批量处理视频剪辑任务 语音合成:将生成的文案转换为自然流畅的语音 字幕特效:自动添加字幕和特效,提升视频质量 批量处理:支持批量任务,按预设自动持续合成视频 多语言支持:支持中文、英文等多种语言,满足不同用户需求 开箱即用:无需复杂配置,用户可以快速上手 持续更新:定期发布新版本,修复bug并添加新功能 安全可靠:完全本地本地化运行,确保用户数据安全 用户友好:简洁直观的用户界面,易于操作 多平台支持:支持Windows、macOS和Linux等多个操作系统
源码来自:https://pan.quark.cn/s/2bb27108fef8 **MetaTrader 5的智能交易系统(EA)**MetaTrader 5(MT5)是由MetaQuotes Software Corp公司研发的一款广受欢迎的外汇交易及金融市场分析软件。 该平台具备高级图表、技术分析工具、自动化交易(借助EA,即Expert Advisor)以及算法交易等多项功能,使交易参与者能够高效且智能化地开展市场活动。 **抛物线SAR(Parabolic SAR)技术指标**抛物线SAR(Stop and Reverse)是由技术分析专家Wells Wilder所设计的一种趋势追踪工具,其目的在于识别价格走势的变动并设定止损及止盈界限。 SAR值的计算依赖于当前价格与前一个周期的SAR数值,随着价格的上扬或下滑,SAR会以一定的加速系数逐渐靠近价格轨迹,一旦价格走势发生逆转,SAR也会迅速调整方向,从而发出交易提示。 **Parabolic SAR EA的操作原理**在MetaTrader 5环境中,Parabolic SAR EA借助内嵌的iSAR工具来执行交易决策。 iSAR工具通过计算得出的SAR位置,辅助EA判断入市与离市时机。 当市场价位触及SAR点时,EA将产生开仓指令,倘若价格持续朝同一方向变动,SAR将同步移动,形成动态止损与止盈参考点。 当价格反向突破SAR时,EA会结束当前仓位并可能建立反向仓位。 **智能交易系统(EA)的优越性**1. **自动化交易**:EA能够持续监控市场,依据既定策略自动完成买卖操作,减少人为情感对交易的影响。 2. **精确操作**:EA依照预设规则操作,无任何迟疑,从而提升交易成效。 3. **风险管控**:借助SA...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值