結果
問題 |
No.3178 free sort
|
ユーザー |
![]() |
提出日時 | 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 }