結果

問題 No.3501 Digit Products 2
コンテスト
ユーザー 2251799813685248
提出日時 2026-04-16 22:01:31
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 66 ms / 2,000 ms
コード長 1,141 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 297 ms
コンパイル使用メモリ 85,504 KB
実行使用メモリ 72,608 KB
平均クエリ数 10.89
最終ジャッジ日時 2026-04-17 20:15:25
合計ジャッジ時間 10,189 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 72
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

N = int(input())
non_zero_digits = [N-1]
answers = [-1]*N #i番目とN-1番目の積の結果が入った配列
for i in range(N-2, -1, -1):
	print("?", i, N-1, flush=True)
	p = int(input())
	answers[i] = p
	if p != 0:
		non_zero_digits.append(i)

if len(non_zero_digits) >= 3:
	print("?", non_zero_digits[2], non_zero_digits[1]) #最後の質問
	highest_digit = answers[non_zero_digits[1]]*answers[non_zero_digits[2]]//int(input()) #最高位の2乗が求まる
	for i in range(1, 10):
		if i*i == highest_digit:
			highest_digit = i
			break
	ans = ["0" for k in range(N)]
	ans[N-1] = str(highest_digit)
	for i in range(1, len(non_zero_digits)):
		ans[non_zero_digits[i]] = str(answers[non_zero_digits[i]]//highest_digit)
	print("! " + "".join(ans[::-1]))
elif len(non_zero_digits) == 2:
	temp = answers[non_zero_digits[1]]
	if temp == 1 or temp == 25 or temp == 49 or temp == 64 or temp == 81:
		for i in range(1, 10):
			if i*i == temp:
				ans = ["0" for k in range(N)]
				ans[non_zero_digits[0]] = str(i)
				ans[non_zero_digits[1]] = str(i)
				print("! " + "".join(ans[::-1]))
				break
	else:
		print("! -1")
else:
	print("! -1")
0