結果

問題 No.2848 Birthday Hit and Blow
ユーザー shobonvipshobonvip
提出日時 2024-08-23 22:48:16
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 689 ms / 2,000 ms
コード長 1,180 bytes
コンパイル時間 374 ms
コンパイル使用メモリ 82,372 KB
実行使用メモリ 95,908 KB
平均クエリ数 432.00
最終ジャッジ日時 2024-08-23 22:48:18
合計ジャッジ時間 1,963 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 116 ms
94,356 KB
testcase_01 AC 689 ms
95,908 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

# いい質問をして絞り込む
import random
def valid(t):
	for i in range(4):
		for j in range(i+1,4):
			if t[i] == t[j]: return False
	return True

a = [31,29,31,30,31,30,31,31,30,31,30,31]
s = []
for i in range(12):
	for j in range(1,a[i]+1):
		t = f"{str(i+1).zfill(2)}{str(j).zfill(2)}"
		if valid(t):
			s.append(t)


T = int(input())
for _ in range(T):
	nokori = s[::]

	while len(nokori) > 1:
		g = 10 ** 18
		v = [[] for i in range(25)]
		tt = ""

		for _ in range(100):
			i = random.randrange(10000)
			t = str(i).zfill(4)
			if not valid(t): continue
			tar = [0] * 10
			for i in range(4):
				tar[int(t[i])] += 1

			bunpu = [[] for i in range(25)]
			for x in nokori:
				hit = 0
				blow = 0
				for j in range(4):
					if x[j] == t[j]:
						hit += 1
					if tar[int(x[j])]:
						blow += 1
				blow -= hit
				#if x == "0823" and t == "4156":
				#	print(hit, blow)
				bunpu[hit*5+blow].append(x)

			cmp = max([len(bunpu[y]) for y in range(25)])
			if cmp < g:
				g = cmp
				v = bunpu[::]
				tt = t
		#print(cmp)
		print(f"? {tt}")
		h,b = map(int,input().split())
		#print(v[h*5+b])
		nokori = v[h*5+b][::]
	print(f"! {nokori[0]}")
	a = int(input())
0