記符號 \(\circledast\) 表示自己做出來的,\(\circleddash\) 表示賀的。
紫色表示紫色,黑色表示黑色。
P5176 公約數 \(\circledast\)
Description
\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=1}^p\gcd(ij,ik,jk)\cdot\gcd(i,j,k)\cdot\dfrac{\gcd(i,j)^2+\gcd(j,k)^2+\gcd(i,k)^2}{\gcd(i,j)\cdot\gcd(j,k)\cdot\gcd(i,k)}\\
n,m,p\leq2\cdot10^7
\]
Solution
不知道怎麼評上黑的。
發現 \(\gcd(ij,ik,jk)\) 很醜陋。我們知道 \(\gcd\) 的本質是質因數的指數取 \(\min\),那麼這個就是
\[\newcommand\I{c_i}
\newcommand\J{c_j}
\newcommand\K{c_k}
\begin{aligned}
&\min(\I+\J,\I+\K,\J+\K)\\
=~&\I+\J+\K-\max(\I,\J,\K)\\
=~&\I+\J+\K-(\min(\I,\J,\K)-\min(\I,\J)-\min(\I,\K)-\min(\J,\K)+\I+\J+\K)\\
=~&\min(\I,\J)+\min(\I,\K)+\min(\J,\K)-\min(\I,\J,\K)\\
\to&\gcd(i,j)\cdot\gcd(i,k)\cdot\gcd(j,k)/\gcd(i,j,k)
\end{aligned}
\]
。一通約分,原式變為
\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=1}^p\gcd(i,j)^2+\gcd(j,k)^2+\gcd(i,k)^2\\
F(n,m):=\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^2\\
\to p\cdot F(n,m)+m\cdot F(n,p)+n\cdot F(m,p)
\]
求 \(F\) 就是機械的 Möbius 反演。直接跳到結果是
\[\sum_{x=1}^n\left\lfloor\frac nx\right\rfloor\left\lfloor\frac mx\right\rfloor\sum_{d\mid x}d^2\mu(x/d)\\
f(x):=\sum_{d\mid x}d^2\mu(x/d)\\
f(p^k)=p^{2k}-p^{2k-2}
\]
於是線性篩,然後數論分塊。
P4965 薇爾莉特的打字機 \(\purple\circledast\)
Description
有個字串,接下來要往後打字或退格若干次,但是每次操作都可能失靈,求有多少可能的最終字串。
串長、運算元 \(5\cdot10^6\)。
Solution
先考慮沒有刪除。那麼這個時候原串沒用。
建一個字典樹,一開始只有根。一次打字如果不失靈就相當於把當前串往字典樹對應字母兒子跳,否則就是留在原地。
那麼一次打字就會讓所有可能當前串節點往該字母方向複製一份,並均成為可能當前串。(說不明白,語文太差。)
可以發現只這麼擴充套件的話整棵樹上每個節點都是可能當前串。
我們只關心每次打字之後字典樹大小的變化量。考慮記 \(dp_c\) 表示有 \(c\) 這個兒子的節點有多少個。它們不會在打字 \(c\) 時產生貢獻。再記錄一個字典樹總大小就能很好地狀態轉移了。
然後刪除怎麼做?發現刪除就是向父親複製一份。那麼只有根節點有影響。狀態轉移一樣很簡單。注意原串刪空了就沒法接著刪了。