アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC452E - You WILL Like Sigma Problem

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略

考え方

愚直にやったらTLEではあるが、
S(j)=Σ[i] A[i]*(i%j)
を高速で求めることは実はそんなに難しくない。
よって、各jについてそれを実行し、
Σ[j] B[j]*S(j)
の方の総和を愚直に足し算しても十分間に合う。

例えば、j=3である場合、
S(3) = A[1]*1 + A[2]*2 + A[3]*0 + A[4]*1 + A[5]*2 + A[6]*0 + ……
であるが、これは
S(3) = ( A[1]*1 + A[2]*2 + A[3]*3 + A[4]*4 + A[5]*5 + A[6]*6 + …… )
                     - 3*( A[3]   + A[4]   + A[5]   + A[6]   + …… )
                                                - 3*( A[6]   + …… )
                                                             - ……
と変形できる。
最初の和は一度計算すればjの値によらないので使いまわせる。
2つめ以降の総和は、累積和を使えばすぐ。
引き算の回数はN/j回なので、S(1)からS(M)まで全部求めるなら合計NlogM回。
よって計算量はO(M+NlogM)で、間に合う。

答えは998244353で割った余りを要求されているので、剰余類環の考えに従って処理する。

解答例


注意点


別解

最近更新されたスレッド
ウィキ募集バナー