結果

問題 No.355 数当てゲーム(2)
ユーザー yuki2006yuki2006
提出日時 2017-01-05 01:12:56
言語 Go
(1.22.1)
結果
WA  
実行時間 -
コード長 1,753 bytes
コンパイル時間 13,126 ms
コンパイル使用メモリ 211,304 KB
実行使用メモリ 24,564 KB
平均クエリ数 12.40
最終ジャッジ日時 2023-09-23 12:33:23
合計ジャッジ時間 24,093 ms
ジャッジサーバーID
(参考情報)
judge15 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 WA -
testcase_33 WA -
testcase_34 WA -
testcase_35 AC 25 ms
23,472 KB
testcase_36 WA -
testcase_37 WA -
testcase_38 WA -
testcase_39 WA -
testcase_40 WA -
testcase_41 WA -
testcase_42 WA -
testcase_43 WA -
testcase_44 WA -
testcase_45 WA -
testcase_46 WA -
testcase_47 WA -
testcase_48 WA -
testcase_49 WA -
testcase_50 WA -
testcase_51 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

package main

import (
	"fmt"
	"os"
)

func ask(v []int) (X int, Y int) {
	fmt.Printf("%d %d %d %d\n", v[0], v[1], v[2], v[3])
	os.Stdout.Sync()
	fmt.Scan(&X, &Y)
	if X == 4 && Y == 0 {
		os.Exit(0)
	}
	return
}

func preCheck() ([]bool, []int) {
	v := make([]int, 4)
	v[0] = 0
	v[1] = 1
	v[2] = 2
	v[3] = 3
	ans := make([]int, 4)
	for p := 0; p < 3; p++ {
		ans[p] = -1
	}
	nums := make([]bool, 10)
	xFirst, yFirst := ask(v)
	for k := 3; k >= 0; k-- {
		for i := 4; i <= 9; i++ {
			for {
				if nums[i] {
					i++
					continue
				}
				break
			}
			v[k] = i
			x, y := ask(v)
			if x+y == 4 {
				for i := 0; i < 4; i++ {
					nums[v[i]] = true
				}
				return nums, ans
			}
			if xFirst < x {
				ans[k] = i
				xFirst = x
				nums[v[k]] = true
				v[k] = i
				break
			} else if xFirst > x {
				ans[k] = k
				nums[v[k]] = true
				v[k] = i - 1
				break
			} else if yFirst > y {
				nums[v[k]] = true
				yFirst = y
				v[k] = i
				break
			} else if yFirst < y {
				nums[k] = true
				v[k] = i - 1
				break
			}

		}
	}
	return nums, ans
}

func main() {
	nums, ans := preCheck()
	v := make([]int, 4)
	notAns := make([]int, 0)
	numList := make([]int, 0)

	for v := 0; v < 10; v++ {
		flag := false
		for j := 0; j < 4; j++ {
			flag = flag || nums[v]
		}
		if flag {
			numList = append(numList, v)
		} else {
			notAns = append(notAns, v)
		}
	}
	p := 0

	for i := 0; i < 4; i++ {
		if ans[i] >= 0 {
			v[i] = ans[i]
		} else {
			// あえて不正解の値を入れる
			v[i] = notAns[p]
			p++
		}
	}

	xFirst, _ := ask(v)
	for i := 0; i < 4; i++ {
		if ans[i] < 0 {
			for p := 0; p < len(numList); p++ {
				v[i] = numList[p]
				x, _ := ask(v)
				p++
				if xFirst < x {
					ans[i] = numList[p]
					break
				}
			}
		}
	}
}
0