题解:P10893 城市化发展委员会

24 年 8 月 22 日 星期四
195 字
1 分钟

笑点解析:昨天写完没点申请题解,今天题解申请通道关了。

看到很多大佬写了 STL 和单调数据结构做法,这里给个思维含量颇高的数学做法。

题目描述

规定一个序列为“安全的”当且仅当这个序列的所有前缀和为正数。

给定一个长度为 nn 的序列 AiA_i,执行 nn 次以下操作得出新的数列 Ai+1A_{i+1}

  • AiA_i 是安全的,将其接到 Ai+1A_{i+1} 末尾。
  • AiA_i 循环左移 11 位。

Ak+1Ak\dfrac{|A_{k+1}|}{|A_k|},答案对 998244353998244353 取模。

思路解析

设所求答案 f(i)=Ai+1Aif(i)=\dfrac{|A_{i+1}|}{|A_i|}g(i)=j=1iAijg(i)=\sum^i_{j=1}A_{ij},易证 f(i)=g(i)f(i)=g(i)。 于是 f(i+1)=g(i+1)=f(i)g(i)=f(i)2f(i+1)=g(i+1)=f(i)g(i)=f(i)^2。所以 f(k)=g(0)2kf(k)=g(0)^{2^k}。写个快速幂就行了,理论上可以用费马小定理再优化一下,没试。

不放代码。

文章标题:题解:P10893 城市化发展委员会

文章作者:Walter_Fang

文章链接:https://blog.walterfang.us.kg/posts/solution-p10893[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。