【题解】AGC003E Sequential operations on Sequence

首先如果 \(q_i\geq q_{i+1}\) 那么 \(q_i\) 没用可以不管,剩下的是一个递增序列。

注意到 \(S_i\) 是 \(S_{i-1}\) 重复 \(\lfloor\frac{|S_{i-1}|}{|S_i|}\rfloor\) 后,再接上 \(S_{i-1}\) 长为 \(|S_i|\bmod |S_{i-1}|\) 的前缀得到的。前一部分很好处理,至于剩下的一部分,假设长度为 \(len\) 。

注意到这个 \(len\) 意思就是问整个序列的前 \(len\) 个,找到最大的不超过 \(len\) 的 \(q_j\),那么前 \(len\) 个,就是由 \(q_j\) 循环若干次,然后接上一块前缀的结果。

这个可以直接递归处理,注意到递归层数是 \(\log q\) 级别的。接的前缀单独处理,剩下的倒推即可,时间复杂度 \(O(n\log n\log q)\) 。

代码:Submission #26269721 - AtCoder Grand Contest 003

上一篇:08线性回归实现的一些问题


下一篇:机器学习-Sequential(pytorch环境)