結果

問題 No.2357 Guess the Function
ユーザー navel_tosnavel_tos
提出日時 2023-06-23 21:55:35
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,687 bytes
コンパイル時間 233 ms
コンパイル使用メモリ 82,284 KB
実行使用メモリ 76,888 KB
平均クエリ数 2.82
最終ジャッジ日時 2024-07-01 01:32:07
合計ジャッジ時間 1,957 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 72 ms
76,384 KB
testcase_01 WA -
testcase_02 AC 66 ms
76,760 KB
testcase_03 AC 67 ms
76,248 KB
testcase_04 AC 65 ms
75,864 KB
testcase_05 WA -
testcase_06 AC 68 ms
76,888 KB
testcase_07 AC 67 ms
76,504 KB
testcase_08 WA -
testcase_09 AC 68 ms
76,632 KB
testcase_10 AC 66 ms
75,608 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#yukicoder394A

'''
xを選ぶ。x+A % B を訊ねる。

中国剰余定理に持ち込みたいが、さてどうする。

x=0 とすればAが割れないか?そんなことないか。x=1でよさそうか。
0が返ってきた場合、A+1=B が保障される。えー 詰みか?

わからないのでバカ全探索しておく。
'''

'''
■全探索: x=50 のときにうまくいくらしい

for x in range(1,101):  #1個目の質問
    C=[set() for _ in range(101)]  #質問xの余りごとに分類
    for A in range(1,100):
        for B in range(A+1,101):
            C[(x+A)%B].add((A,B))
    #2個目の質問を行う 分類ごとに質問を変えて良い
    for St in C:
        for y in range(1,101):
            if x==y: continue
            Z=set(); hantei=1
            for now in St:
                A,B=now
                t=(y+A)%B
                if t in Z: hantei=0
                else: Z.add(t)
            if not hantei: continue
            else: break
        else: break
    else: print(x); break
'''

#x=50 のときの分類を行う
C=[set() for _ in range(101)]; x=50
for A in range(1,100):
    for B in range(A+1,101):
        C[(50+A)%B].add((A,B))

#余りごとに対応を考える
print('?',50)
N=int(input()); Candidate=C[N]
if len(Candidate)==1: A,B=Candidate.pop(); print('!',A,B); exit()

#残り候補から絞り込みを行う
for y in range(1,101):
    Z=set()
    for A,B in Candidate:
        Z.add((y+A)%B)
    if len(Z)!=len(Candidate): continue
    else: break

print('?',y); M=int(input())

#候補を全探索し、余りがMになるものを探す
for A,B in Candidate:
    if (y+A)%B==M: print('!',A,B); exit()
0