結果
| 問題 | No.3418 【絶望】30個並列ごちゃ混ぜHit&Blowで遊ぼう! |
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2025-12-27 12:44:30 |
| 言語 | Go (1.25.5) |
| 結果 |
AC
|
| 実行時間 | 92 ms / 5,000 ms |
| コード長 | 1,263 bytes |
| 記録 | |
| コンパイル時間 | 14,276 ms |
| コンパイル使用メモリ | 246,936 KB |
| 実行使用メモリ | 26,356 KB |
| スコア | 9,991,109 |
| 平均クエリ数 | 88.91 |
| 最終ジャッジ日時 | 2025-12-27 12:44:59 |
| 合計ジャッジ時間 | 26,821 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 100 |
ソースコード
package main
// 解説読んだ
import . "fmt"
import . "os"
import bf "bufio"
import . "math/rand"
func main() {
rd := bf.NewReader(Stdin)
wr := bf.NewWriter(Stdout)
defer wr.Flush()
nums := make([]int, 0, 30240)
for i := 0; i < 1e5; i++ {
ccc := make([]int, 10)
for k, t := 0, i; k < 5; k++ {
ccc[t%10]++
if ccc[t%10] > 1 {
ccc[0] = -1
break
}
t /= 10
}
if ccc[0] < 0 {
continue
}
nums = append(nums, i)
}
Shuffle(len(nums), func(i, j int) {
nums[i], nums[j] = nums[j], nums[i]
})
tnums := make([]int, len(nums))
for len(nums) > 0 {
n := nums[0]
nums = nums[1:]
Fprintf(wr, "%05d\n", n)
wr.Flush()
fin := false
mm := make([]int, 100)
for i := 0; i < 30; i++ {
var hi, bi int
Fscan(rd, &hi, &bi)
if i == 0 && hi == 5 {
fin = true
}
mm[hi * 10 + bi]++
}
if fin {
return
}
tnums = tnums[:0]
for _, t := range nums {
h, b := hitAndBlow(n, t)
if mm[h*10+b] > 0 {
tnums = append(tnums, t)
}
}
nums, tnums = tnums, nums
}
}
func hitAndBlow(x, y int) (h, b int) {
for i := 0; i < 5; i++ {
for j, ty := 0, y; j < 5; j++ {
if x % 10 == ty % 10 {
if i == j {
h++
} else {
b++
}
}
ty /= 10
}
x /= 10
}
return
}
ID 21712