結果
| 問題 |
No.1815 K色問題
|
| ユーザー |
|
| 提出日時 | 2022-02-05 15:58:20 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 588 ms / 2,000 ms |
| コード長 | 1,537 bytes |
| コンパイル時間 | 289 ms |
| コンパイル使用メモリ | 82,156 KB |
| 実行使用メモリ | 79,788 KB |
| 最終ジャッジ日時 | 2024-09-29 22:43:16 |
| 合計ジャッジ時間 | 3,371 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 13 |
ソースコード
import sys
N,M,K = map(int,input().split())
P = 10 ** 9 + 7
if K == 1:
if M > 1 or N > 1:
print(0)
else:
print(1)
exit()
if K > N * M:
print(0)
exit()
C = K + 1
fact = [1] * C
fact_inv = [1] * C
for i in range(2,C):
fact[i] = fact[i-1] * i % P
fact_inv[-1] = pow(fact[-1],P-2,P)
for i in range(C-2,0,-1):
fact_inv[i] = fact_inv[i+1] * (i+1) % P
def f(k):
if N == 1:
return k * pow(k-1,M-1,P) % P
if N == 2:
return k * (k-1) * pow(k*k-3*k+3,M-1,P)%P
A = [[3 + k * (-3 + k)%P,5 + k * (-4 + k)%P],
[-10 + k * (13 + k * (-6 + k)%P)%P,-13 + (14 + k * (-6 + k)%P) *k%P]]
tmp = [[1,0],
[0,1]]
a = k * (k-1) % P
b = k * (k-1) %P * (k-2) % P
u = M - 1
while u:
if u & 1:
tmp[0][0],tmp[0][1],tmp[1][0],tmp[1][1] = (tmp[0][0] * A[0][0]%P + tmp[0][1]*A[1][0]%P)%P,(tmp[0][0]*A[0][1]%P+tmp[0][1]*A[1][1]%P)%P,(tmp[1][0]*A[0][0]%P+tmp[1][1]*A[1][0]%P)%P,(tmp[1][0]*A[0][1]%P+tmp[1][1]*A[1][1]%P)%P
A[0][0],A[0][1],A[1][0],A[1][1] = (A[0][0]*A[0][0]%P+A[0][1]*A[1][0]%P)%P,(A[0][0]*A[0][1]%P+A[0][1]*A[1][1]%P)%P,(A[1][0]*A[0][0]%P+A[1][1]*A[1][0]%P)%P,(A[1][0]*A[0][1]%P+A[1][1]*A[1][1]%P)%P
u >>= 1
ans =((tmp[0][0] * a % P + tmp[0][1] * b % P)%P + tmp[1][0] * a % P)%P + tmp[1][1] * b % P
return ans % P
ans = 0
for i in range(K-1):
if i % 2 == 0:
c = 1
else:
c = -1
tmp = c * fact[K] * fact_inv[i]%P*fact_inv[K-i]%P*f(K-i)%P
ans = (ans + tmp) % P
print(ans)