結果
| 問題 | No.253 ロウソクの長さ | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2015-08-20 15:32:49 | 
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 50 ms / 2,000 ms | 
| コード長 | 1,131 bytes | 
| コンパイル時間 | 134 ms | 
| コンパイル使用メモリ | 12,672 KB | 
| 実行使用メモリ | 27,608 KB | 
| 平均クエリ数 | 20.86 | 
| 最終ジャッジ日時 | 2024-07-16 21:10:48 | 
| 合計ジャッジ時間 | 3,717 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 36 | 
ソースコード
#coding=UTF-8
#log_2 10^9=29.89だそうな
#100以上なら(わりかし)普通の二分探索でやるだけの話
#1 cmとかいうevilなのが無いのが救いか
#100未満の場合はあと9回で 楽勝でしょ
#ユキコちゃんとのやりとりのしかたはNo.246(URIは551)を参考に
import sys
ans=1
jogen=10**9
kagen=10
burnt=0
print('? 100')
sys.stdout.flush()
res = int(input())
if res==0:
    kagen=100
    jogen=100
elif res==1:
    kagen=100+1
else:
    jogen=100-1
burnt=burnt+1
while not (jogen-kagen<=1):
    print ("? "+str((jogen+kagen)//2-burnt))
    sys.stdout.flush()
    res = int(input())
    if res==0:
        kagen=(jogen+kagen)//2
        jogen=kagen
    elif res==1:
        kagen=(jogen+kagen)//2+1
    else:
        jogen=(jogen+kagen)//2-1
    burnt=burnt+1
#    print((jogen,kagen))
if jogen-kagen==1:
    print("? "+str(jogen-burnt))
    sys.stdout.flush()
    res=int(input())
    if res==0:
        ans=jogen
    else:
        ans=kagen
else:
    ans=jogen
print("! "+str(ans))
sys.stdout.flush()
#質問する数を変数に仕舞っておくと良かったかもしれない
            
            
            
        