結果
問題 |
No.1187 皇帝ペンギン
|
ユーザー |
|
提出日時 | 2022-04-01 16:38:59 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
RE
|
実行時間 | - |
コード長 | 972 bytes |
コンパイル時間 | 780 ms |
コンパイル使用メモリ | 12,416 KB |
実行使用メモリ | 27,584 KB |
平均クエリ数 | 17.26 |
最終ジャッジ日時 | 2024-11-19 10:50:02 |
合計ジャッジ時間 | 6,868 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 52 RE * 2 |
ソースコード
""" nを特定する必要あり 1<=n<=10**3 2<=d<=10**9 叩くいた合計がdの倍数ならout 普通に二分探索 """ class Ask: def __init__(self): self.count=0 self.responce=[None]*1001 def ask(self,x): if self.responce[x] is None: print("?",x) self.count+=1 self.responce[x]=input() return self.responce[x] # out三連続はD=2のときだけ # out二連続はNとD倍数が隣り合うとき return self.responce[x] ask=Ask() l,r=0,1001 # nは[l,r)の範囲内にある while r-l>3: x=(l+r)//2 #print(f"[{l},{r})",x) ans=ask.ask(x) if ans=="safe":# nはx+1以上 l,r=x+1,r continue ans=ask.ask(x+1) if ans=="out":# nはx以上 l,r=l,x+1 else: l,r=x+2,r ret=l for n in range(l-2,r): ans=ask.ask(n) if ans=="safe": ret=n print("!",ret) #print(ask.count) """ n=502 d=50 n=499 d=2 """