結果
| 問題 |
No.3178 free sort
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2025-06-22 13:09:01 |
| 言語 | Go (1.23.4) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 776 bytes |
| コンパイル時間 | 12,413 ms |
| コンパイル使用メモリ | 248,944 KB |
| 実行使用メモリ | 9,952 KB |
| 最終ジャッジ日時 | 2025-06-22 13:09:26 |
| 合計ジャッジ時間 | 24,271 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 WA * 1 |
| other | WA * 40 |
ソースコード
package main
import . "fmt"
const Mod = 998244353
func main() {
var n string
Scan(&n)
ds := make([]int, 10)
for _, ch := range n {
ds[int(ch)-'0']++
}
xs := make([]int, len(n)+1)
for i := range xs {
for _, d := range ds {
if i <= d {
xs[i]++
}
}
}
// 解説読んだ
ans := calc(len(n), xs)
if ds[0] > 0 {
xs[ds[0]]--
ans += calc(len(n)-1, xs)
ans %= Mod
}
Println(ans)
}
func calc(n int, xs []int) int {
cs := make([]int, n+1)
for i := range cs {
cs[i] = i
}
for i := range xs {
j := len(xs)-1 - i
if j == 0 {
break
}
x := xs[j]
m := n / j
for k := m; x > 0 && k >= 1; k-- {
for x > 0 && cs[k*j] % j == 0 {
cs[k*j] /= j
x--
}
}
}
r := 1
for _, c := range cs[1:] {
r = r * c % Mod
}
return r
}
ID 21712