牛客2025秋季算法编程训练联赛4-基础组
牛客2025秋季算法编程训练联赛4-基础组_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ C 子段乘积 比赛时思路(没写出来OvO): 本题一开始想到了一个方法,简单来说就是先乘上一个数然后除掉结尾的数每次运算进行取模,但是发现0这个数处理比较复杂,于是就一直纠结在处理0的问题上。怎样选择k个数,其中不包含0呢? 我想到了状态记录,将0位开始的k个数所对应的状态记录为1,其余为0,那就将以这个数据结尾的k个数相乘再取最大值就可以了。但是我忽视了时间复杂度,状态记录需要两层循环,时间复杂度是O(nk)O(nk)O(nk)超时了。 我又想到了个方法,就是用last记录上一次0出现的下标,如果当前非0数离上一个0距离>k,那就将以这个数据结尾的k个数相乘再取最大值,但是我想了好久都没有实现。 AC思路: 思路1:尺取法,l代表左端点,r代表右端点。l先不动,r往前扫描,如果成功扫到,有k个非0元素的子段就累成起来,最后把最左端的元素除了,左端点往前移动,l++,再继续扫描。再未达到k个非零元素的子段前,如果遇到0,当前的区间就废了 ,左端点直接到...