結果
| 問題 |
No.1156 Nada Picnic 2
|
| ユーザー |
ID 21712
|
| 提出日時 | 2024-12-23 22:14:24 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 506 ms / 2,000 ms |
| コード長 | 1,303 bytes |
| コンパイル時間 | 14,575 ms |
| コンパイル使用メモリ | 225,604 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-23 22:14:40 |
| 合計ジャッジ時間 | 14,426 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 3 |
ソースコード
package main
import . "fmt"
func main() {
var n int
Scan(&n)
switch n {
case 1:
solve("シイタ","ケヤマ", "イキタイ")
case 2:
solve("オオツカ","コクサイ","ビジツカン")
case 3:
solve("spring","eight","picnic")
}
}
func solve(ss ...string) {
t, m := index(ss...)
d := len(m)
v := make([]int, d)
dfs(d, t, 0, v, func() bool {
sum, ok := calc(v, m, ss...)
if ok {
Println(sum)
}
return ok
})
}
func calc(v []int, m map[rune]int, ss ...string) (sum int, ok bool) {
for i, s := range ss {
var x int
for _, r := range s {
x = x * 10 + v[m[r]]
}
if i+1 < len(ss) {
sum += x
} else {
return sum, sum == x
}
}
return
}
func index(ss ...string) (t int, m map[rune]int) {
m = map[rune]int{}
var i int
for _, s := range ss {
for _, r := range s {
if _, ok := m[r]; !ok {
m[r] = i
i++
t++
}
break
}
}
for _, s := range ss {
for _, r := range s {
if _, ok := m[r]; !ok {
m[r] = i
i++
}
}
}
return
}
func dfs(d, t, u int, v []int, callback func() bool) bool {
if d == 0 {
return callback()
}
s := 0
if t > 0 {
s++
}
for i:=s; i <= 9; i++ {
if (u&(1<<i)) != 0 {
continue
}
v[len(v)-d] = i
if dfs(d-1,t-1,u|(1<<i),v, callback) {
return true
}
}
return false
}
ID 21712