Can you stop exactly? 4

2 secs 1024 MB
YSatUT's icon YSatUT

xxについての形式的冪級数ffxix^iの係数を[xi]f[x^i]fと表すと、サイコロをkk回振った時、出た目の合計がiiになる確率は[xi](1nx+1nx2++1nxn)k[x^i]\left(\frac{1}{n}x+\frac{1}{n}x^2+\cdots+\frac{1}{n}x^n\right)^kとなります。よって、g(x)=(1nx+1nx2++1nxn)kg(x)=\left(\frac{1}{n}x+\frac{1}{n}x^2+\cdots+\frac{1}{n}x^n\right)^kとおくと、求める確率は2m2^mの倍数であるようなiiについて[xi]g[x^i]gを合計した値となります。ここで、[xi]g=ci[x^i]g=c_iとすると、g(x)=icixig(x)=\displaystyle\sum_{i}c_ix^iとなります。また、求める確率p=2micip=\displaystyle\sum_{2^m \mid i}c_iとなります。

ここで、112m2^m乗根をξ\xiとすると、ii2m2^mの倍数の時j=02m1ξij=j=02m11j=2m\displaystyle\sum_{j=0}^{2^m-1}\xi^{ij}=\displaystyle\sum_{j=0}^{2^m-1}1^{j}=2^mとなり、そうではない時はξi1\xi^i \neq 1なので、 j=02m1ξij=1(ξi)2m1ξi=1(ξ2m)i1ξi=11i1ξi=0\displaystyle\sum_{j=0}^{2^m-1}\xi^{ij}=\frac{1-(\xi^i)^{2^m}}{1-\xi^i}=\frac{1-(\xi^{2^m})^i}{1-\xi^i}=\frac{1-1^i}{1-\xi^i}=0となります。よって、j=02m1g(ξj)=icij=02m1ξij=2m2mici=2mp\displaystyle\sum_{j=0}^{2^m-1}g(\xi^j)=\sum_{i}c_i\displaystyle\sum_{j=0}^{2^m-1}\xi^{ij}=2^m\displaystyle\sum_{2^m \mid i}c_i=2^m pとなるので、p=12mj=02m1g(ξj)p=\displaystyle\frac{1}{2^m}\displaystyle\sum_{j=0}^{2^m-1}g(\xi^j)となります。

次に、適切なξ\xiを求めます。33998244353(=119×223+1)998244353(=119 \times 2^{23}+1)の原始根の1つなので、2119×223m2^{119 \times 2^{23-m}}112m2^m乗根の1つです。よって、2119×223m2^{119 \times 2^{23-m}}998244353998244353で割った余りをξ\xiとすれば良いです。

最後に、g(ξj)g(\xi_j)の求め方について述べます。x+x2++xnx+x^2+\cdots+x^nをそのまま計算すると、0j<2m0 \leq j < 2^mにおける計算量がO(2mn)O(2^mn)となってしまい、制限時間に間に合いません。そこで、x=1x=1すなわちj=0j=0の場合はg(x)=1g(x)=1とし、それ以外の場合はg(x)=(1nxxn1x1)k=xk(xn1)knk(x1)kg(x)=\left(\displaystyle\frac{1}{n}x\cdot\frac{x^n-1}{x-1}\right)^k=\displaystyle\frac{x^k(x^n-1)^k}{n^k(x-1)^k}として、これにx=ξjx=\xi^jを代入します。

これにより、mod 998244353{\rm mod}\ 998244353における除算は定数時間で行えるものとすると、ppO(2mlogk)O(2^m\log k)で計算できるため、十分時間内に間に合います。

解答例

modint型を利用するため、AC Libraryの一部を引用しました。引用した部分に関しては、解答例にその旨を明記してあります。

ans.cpp

質問・誤りがある場合

Twitterに連絡ください。ID : @YS55749378