halcの競プロ精進ブログ

はるくが競プロしたことを書き留めるなにか

【今日の精進】ARC147D - Sets Scores

毎日格上の問題を倒すやつの22日目です。

問題リンク

atcoder.jp

問題概要

集合の列に対して、隣り合う要素で片方にしかないものがちょうど1つであるものを、「素晴らしい整数の列」とするよ。

また、「素晴らしい整数の列」のスコアを、i を含む集合の個数をすべての i に対して求めたものの総積とするよ。

すべての「素晴らしい整数の列」のスコアの和を 998244353 で割ったあまりを求めてね。

解法

長さ N-1 の数列を決めると、天才ができます。

最初の集合は 2^{M-1} 通りですが、これらすべてに対するスコアの和が N^M になることが証明できます。

なので、これと数列の数の積が答えです。1

提出コード

MOD=998244353
N,M=map(int,input().split())
print((pow(N,M,MOD)*pow(M,N-1,MOD))%MOD)

Submission #46463209 - AtCoder Regular Contest 147

感想

天才をするの気持ちいいよね


  1. 過去一雑じゃないですか?