結果
| 問題 |
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
"""