結果
問題 |
No.2593 Reorder and Mod 120
|
ユーザー |
![]() |
提出日時 | 2025-04-27 00:13:20 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 221 ms / 2,000 ms |
コード長 | 1,049 bytes |
コンパイル時間 | 12,295 ms |
コンパイル使用メモリ | 237,064 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-04-27 00:13:37 |
合計ジャッジ時間 | 15,902 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 26 |
ソースコード
package main import . "fmt" import . "slices" // いろいろ実験した結果 // 10進数の桁ごとに余りを見る // つまり 10^k % 120 をすると (k >= 0) // k=0 は 1 // k=1 は 10 // k=2 は 100 // k>=3 は 40 // よって、下位3桁のみ気にすればよいかんじ? func main() { var n int var s string Scan(&n, &s) t := make([]int, 10) for _, c := range s { t[int(c)-'0']++ } ans := map[int]bool{} if n < 4 { for i := 1; i < 1e4; i++ { w := make([]int, 10) for _, c := range Sprint(i) { w[int(c)-'0']++ } if Equal(t, w) { ans[i%120] = true } } Println(len(ans)) return } sum := 0 for i := 1; i <= 9; i++ { sum += 40*i*t[i] } for i := 1; i <= 9; i++ { if t[i] == 0 { continue } t[i]-- for j := 1; j <= 9; j++ { if t[j] == 0 { continue } t[j]-- for k := 1; k <= 9; k++ { if t[k] == 0 { continue } t[k]-- p := i+10*j+100*k - 40*(i+j+k) ans[(p+sum)%120] = true t[k]++ } t[j]++ } t[i]++ } Println(len(ans)) }