考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC046-B - AtCoDeerくんとボール色塗り / Painting Balls with AtCoDeer を解く

ABC046-B - AtCoDeerくんとボール色塗り / Painting Balls with AtCoDeer

 

なんだか数学的な問題が来た

難しそうだが、とりあえず具体的な数字で考えてみることにする

 

たとえば、10個のボールを3色で塗り分ける場合

左端から塗っていくことを考えると、最初の1個目は何色で塗っても問題ない

よって3通り

 

左から2番目は、左隣の色と被らないようにするため2通りの塗り方がある

左から3番目は、左隣の色と被らないようにするため2通りの塗り方がある

左から4番目は、左隣の色と被らないようにするため2通りの塗り方がある

 

というわけで、10個のボールを3色で塗り分ける場合は

3 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 1536 通り

となる

 

一般化すると、N個のボールをK色で塗り分ける場合、そのパターン数は

K × (K-1) × (K-1) × … × (K-1) 通り

となる(K-1N-1 回 掛ける)

 

よって、コードは以下のようになる

 

提出したコード

# 入力
N,K=map(int,input().split())

# 出力
print(K*pow(K-1,N-1))

 

提出結果はACでした