結果
| 問題 |
No.1629 Sorting Integers (SUM of M)
|
| コンテスト | |
| ユーザー |
FromBooska
|
| 提出日時 | 2023-06-01 18:18:17 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 234 ms / 2,000 ms |
| コード長 | 1,154 bytes |
| コンパイル時間 | 568 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 88,832 KB |
| 最終ジャッジ日時 | 2024-12-28 15:02:24 |
| 合計ジャッジ時間 | 3,804 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 14 |
ソースコード
# たとえばC = 432000000, N=9とすると
# 数字の全組合せのパターン数は9!/(4!3!2!)
# では100の位に2が来るパターン数は、1つ数字が固定されるので8!/(4!(3-1)!2!)
# つまり寄与数で考えれば2*100*8!/(4!(3-1)!2!)
# 求めたいのはΣ(桁d from 0 to N-1)Σ(i from 1 to 9) i*10**d*(以下)
# ci*(N-1)!/(c1!c2!---c9!)
# Σ内を変数で分けて
# = (N-1)! Σ(桁d from 0 to N-1)10**d Σ(i from 1 to 9) i*ci/(c1!c2!---c9!)
# = (N-1)! (10**N - 1)/9 Σ(i from 1 to 9) i*ci/(c1!c2!---c9!)
# = calc1 * calc2 * calc3とする
N = int(input())
C = list(map(int, input().split()))
mod = 10**9+7
# nCrメモ化パッケージ
factorial = [1] #0分
inverse = [1] #0分
for i in range(1, N+1):
factorial.append(factorial[-1]*i%mod)
inverse.append(pow(factorial[-1], mod-2, mod))
calc1 = factorial[N-1]
calc2 = (pow(10, N, mod)-1)*pow(9, mod-2, mod)
#print(calc1)
#print(calc2)
inv = 1
for c in C:
inv *= factorial[c]
inv %= mod
c_factorial = pow(inv, mod-2, mod)
calc3 = 0
for i in range(1, 10):
calc3 += i*C[i-1]*c_factorial
calc3 %= mod
ans = calc1 * calc2 * calc3
ans %= mod
print(ans)
FromBooska