結果
| 問題 |
No.1187 皇帝ペンギン
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-04-01 16:41:20 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 55 ms / 1,000 ms |
| コード長 | 986 bytes |
| コンパイル時間 | 85 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 27,464 KB |
| 平均クエリ数 | 17.30 |
| 最終ジャッジ日時 | 2024-11-19 10:56:30 |
| 合計ジャッジ時間 | 6,004 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 54 |
ソースコード
"""
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=max(0,l)
for n in range(max(l-2,1),r):
ans=ask.ask(n)
if ans=="safe":
ret=n
print("!",ret)
#print(ask.count)
"""
n=502
d=50
n=499
d=2
"""