結果
| 問題 |
No.3178 free sort
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2025-06-22 14:38:06 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 254 ms / 2,000 ms |
| コード長 | 798 bytes |
| コンパイル時間 | 12,824 ms |
| コンパイル使用メモリ | 246,916 KB |
| 実行使用メモリ | 9,948 KB |
| 最終ジャッジ日時 | 2025-06-22 14:38:32 |
| 合計ジャッジ時間 | 24,391 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 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 += Mod - calc(len(n)-1, xs)
ans %= Mod
}
Println(ans)
}
func calc(n int, xs []int) int {
ps := make([]bool, n+1)
ps[0],ps[1] = true, true
cs := make([]int, n+1)
for i := range ps {
if ps[i] {
continue
}
for j := i; j < len(ps); j += i {
ps[j] = true
cnt := 0
for t := j; t % i == 0; t /= i {
cnt++
}
cs[i] += cnt * (1 - xs[j])
}
}
r := 1
for i, c := range cs {
for ; c > 0; c-- {
r = r * i % Mod
}
}
return r
}
ID 21712